gpt4 book ai didi

php - 在 SPL 自动加载器中抛出异常?

转载 作者:可可西里 更新时间:2023-11-01 13:34:39 27 4
gpt4 key购买 nike

有没有办法在 PHP 中从 SPL 自动加载器抛出异常以防失败?它似乎不能在 PHP 5.2.11 下工作。

class SPLAutoLoader{

public static function autoloadDomain($className) {
if(file_exists('test/'.$className.'.class.php')){
require_once('test/'.$className.'.class.php');
return true;
}

throw new Exception('File not found');
}

} //end class

//start
spl_autoload_register( array('SPLAutoLoader', 'autoloadDomain') );

try{
$domain = new foobarDomain();
}catch(Exception $c){
echo 'File not found';
}

当调用上面的代码时,没有任何异常迹象,而是出现了标准的“ fatal error :在 bla 中找不到类‘foobarDomain’”。并且脚本的执行终止。

最佳答案

这不是错误,而是 a design decision :

Note: Exceptions thrown in __autoload function cannot be caught in the catch block and results in a fatal error.

原因是可能有多个自动加载处理程序,在这种情况下,您不希望第一个处理程序抛出异常并绕过第二个处理程序。您希望您的第二个处理程序有机会自动加载它的类。如果您使用的库使用了自动加载功能,您不希望它绕过您的自动加载处理程序,因为它们会在自动加载器中抛出异常。

如果你想检查你是否可以实例化一个类,那么使用class_exists并将 true 作为第二个参数传递(或者将其省略,true 是默认值):

if (class_exists('foobarDomain', $autoload = true)) {
$domain = new foobarDomain();
} else {
echo 'Class not found';
}

关于php - 在 SPL 自动加载器中抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com