改写标题:为什么 PHP 不处理“找不到类”错误?
P粉475126941
P粉475126941 2024-01-03 19:53:41
[PHP讨论组]

在下面的示例中,如果该类不存在,我想捕获错误并创建一个 Null 类。

但是尽管我有 try/catch 语句,PHP 只是告诉我 未找到 'SmartFormasdfasdf' 类

如何让 PHP 捕获“未找到类”错误?

this is the login form

'; } } class SmartFormCodeWrapper extends SmartForm { public function render() { echo '

this is the code wrapper form

'; } } class SmartFormNull extends SmartForm { public function render() { echo '

the form "' . htmlentities($this->idCode) . '" does not exist

'; } } class SmartForm { protected $idCode; public function __construct($idCode) { $this->idCode = $idCode; } public static function create($smartFormIdCode) { $className = 'SmartForm' . $smartFormIdCode; try { return new $className($smartFormIdCode); } catch (Exception $ex) { return new SmartFormNull($smartformIdCode); } } } $formLogin = SmartForm::create('Login'); $formLogin->render(); $formLogin = SmartForm::create('CodeWrapper'); $formLogin->render(); $formLogin = SmartForm::create('asdfasdf'); $formLogin->render(); ?>

解决方案:

谢谢@Mchl,这就是我解决它的方法:

public static function create($smartFormIdCode) {
  $className = 'SmartForm' . $smartFormIdCode;
  if(class_exists($className)) {
    return new $className($smartFormIdCode);
  } else {
    return new SmartFormNull($smartFormIdCode);
  }
}


P粉475126941
P粉475126941

全部回复(2)
P粉680000555

老问题,但在 PHP7 中这是一个可捕获的异常。尽管我仍然认为 class_exists($class) 是一种更明确的方法。但是,您可以使用新的 \Throwable 异常类型执行 try/catch 块:

$className = 'SmartForm' . $smartFormIdCode;
try {
    return new $className($smartFormIdCode);
} catch (\Throwable $ex) {
    return new SmartFormNull($smartformIdCode);
}
P粉810050669

因为这是一个致命错误。使用class_exists()函数检查类是否存在。

另外:PHP 不是 Java - 除非您重新定义默认错误处理程序,否则它会引发错误而不抛出异常。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号