2019-02-18 14:35:45 +00:00
|
|
|
--TEST--
|
|
|
|
ReflectionClass::isSubclassOf() - fixed crash for unbound anonymous class
|
2021-07-30 13:23:39 +00:00
|
|
|
--SKIPIF--
|
|
|
|
<?php
|
|
|
|
if (getenv('SKIP_PRELOAD')) die('skip Anon class is linked during preloading');
|
|
|
|
?>
|
2019-02-18 14:35:45 +00:00
|
|
|
--FILE--
|
|
|
|
<?php
|
|
|
|
class X {
|
|
|
|
public static function main() {
|
|
|
|
return new class() extends Base {};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
class Base {}
|
|
|
|
$check = function () {
|
|
|
|
$base = Base::class;
|
|
|
|
foreach (get_declared_classes() as $class) {
|
2020-02-06 10:13:13 +00:00
|
|
|
if (strpos($class, '@anonymous') === false) {
|
2019-02-18 14:35:45 +00:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
echo "Checking for $class\n";
|
|
|
|
flush();
|
|
|
|
$rc = new ReflectionClass($class);
|
|
|
|
var_export($rc->isSubclassOf($base));
|
|
|
|
echo "\n";
|
|
|
|
}
|
|
|
|
};
|
|
|
|
// Should not show up in get_declared_classes until the anonymous class is bound.
|
|
|
|
$check();
|
|
|
|
echo "After first check\n";
|
|
|
|
X::main();
|
|
|
|
$check();
|
|
|
|
echo "Done\n";
|
|
|
|
?>
|
|
|
|
--EXPECTF--
|
|
|
|
After first check
|
2020-02-06 10:13:13 +00:00
|
|
|
Checking for Base@%s
|
2019-02-18 14:35:45 +00:00
|
|
|
true
|
|
|
|
Done
|