php-src/Zend/tests/bug49908.phpt
Nikita Popov 4b9ebd837b Allow throwing exception while loading parent class
This is a fix for symfony/symfony#32995.

The behavior is:

* Throwing exception when loading parent/interface is allowed
  (and we will also throw one if the class is simply not found).
* If this happens, the bucket key for the class is reset, so
  it's possibly to try registering the same class again.
* However, if the class has already been used due to a variance
  obligation, the exception is upgraded to a fatal error, as we
  cannot safely unregister the class stub anymore.
2019-09-12 16:41:18 +02:00

38 lines
715 B
PHP

--TEST--
Bug #49908 (throwing exception in __autoload crashes when interface is not defined)
--FILE--
<?php
spl_autoload_register(function ($className) {
var_dump($className);
if ($className == 'Foo') {
class Foo implements Bar {};
} else {
throw new Exception($className);
}
});
try {
new Foo();
} catch (Exception $e) { }
// We never reach here.
var_dump(new Foo());
?>
--EXPECTF--
string(3) "Foo"
string(3) "Bar"
string(3) "Foo"
string(3) "Bar"
Fatal error: Uncaught Exception: Bar in %s:%d
Stack trace:
#0 [internal function]: {closure}('Bar')
#1 %s(%d): spl_autoload_call('Bar')
#2 [internal function]: {closure}('Foo')
#3 %s(%d): spl_autoload_call('Foo')
#4 {main}
thrown in %s on line %d