mirror of
https://github.com/php/php-src.git
synced 2026-04-20 14:31:06 +02:00
Replace EG(autoload_func) with a C level zend_autoload hook. This avoids having to do one indirection through PHP function calls. The need for EG(autoload_func) was a leftover from the __autoload() implementation. Additionally, drop special-casing of spl_autoload(), and instead register it just like any other autoloading function. This fixes bug #71236 as a side-effect. Finally, change spl_autoload_functions() to always return an array. The distinction between false and an empty array no longer makes sense here. Closes GH-5696.
53 lines
1.0 KiB
PHP
53 lines
1.0 KiB
PHP
--TEST--
|
|
SPL: spl_autoload() capturing multiple Exceptions in __autoload
|
|
--FILE--
|
|
<?php
|
|
|
|
function autoload_first($name)
|
|
{
|
|
echo __METHOD__ . "\n";
|
|
throw new Exception('first');
|
|
}
|
|
|
|
function autoload_second($name)
|
|
{
|
|
echo __METHOD__ . "\n";
|
|
throw new Exception('second');
|
|
}
|
|
|
|
spl_autoload_register('autoload_first');
|
|
spl_autoload_register('autoload_second');
|
|
|
|
try {
|
|
class_exists('ThisClassDoesNotExist');
|
|
} catch(Exception $e) {
|
|
do {
|
|
echo $e->getMessage()."\n";
|
|
} while($e = $e->getPrevious());
|
|
}
|
|
|
|
try {
|
|
new ThisClassDoesNotExist;
|
|
} catch(Exception $e) {
|
|
do {
|
|
echo $e->getMessage()."\n";
|
|
} while($e = $e->getPrevious());
|
|
}
|
|
|
|
class_exists('ThisClassDoesNotExist');
|
|
?>
|
|
===DONE===
|
|
--EXPECTF--
|
|
autoload_first
|
|
first
|
|
autoload_first
|
|
first
|
|
autoload_first
|
|
|
|
Fatal error: Uncaught Exception: first in %sspl_autoload_012.php:%d
|
|
Stack trace:
|
|
#0 [internal function]: autoload_first('ThisClassDoesNo...')
|
|
#1 %sspl_autoload_012.php(%d): class_exists('ThisClassDoesNo...')
|
|
#2 {main}
|
|
thrown in %s on line %d
|