Skip to content

Commit 8460f92

Browse files
committed
Make sure to load the class for object variance
1 parent 8894ce1 commit 8460f92

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
Forward compatibility with types that look like classes but aren't
3+
--FILE--
4+
<?php
5+
6+
spl_autoload_register(function($class) {
7+
var_dump($class);
8+
if ($class === 'X') {
9+
class X {}
10+
} else {
11+
class Y {}
12+
}
13+
});
14+
15+
class A {
16+
public function method(X $param) : object {}
17+
}
18+
19+
class B extends A {
20+
public function method(object $param) : Y {}
21+
}
22+
23+
?>
24+
--EXPECT--
25+
string(1) "Y"
26+
string(1) "X"

Zend/zend_inheritance.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,8 @@ _inheritance_status _check_covariance(
320320
code = INHERITANCE_UNRESOLVED;
321321
}
322322
} else if (proto_type_code == IS_OBJECT) {
323-
code = INHERITANCE_SUCCESS;
323+
zend_class_entry *fe_ce = lookup_class(fe_class_name);
324+
code = fe_ce ? INHERITANCE_SUCCESS : INHERITANCE_UNRESOLVED;
324325
} else {
325326
code = INHERITANCE_ERROR;
326327
}

0 commit comments

Comments
 (0)