【发布时间】:2014-05-10 09:52:16
【问题描述】:
是否知道调用class_exists时自动加载器是否成功?
【问题讨论】:
-
1.不要传递第二个参数或传递
false2。然后检查class_exists返回的内容。 ?
是否知道调用class_exists时自动加载器是否成功?
【问题讨论】:
false 2。然后检查class_exists 返回的内容。 ?
就在自动加载器结束时检查类是否存在。
function __autoload($className) {
//Your code here
if(class_exists('You_Class', false)) {
//succeed
} else {
//failure
}
}
【讨论】:
class_exists 不会调用自动加载器。所以你的代码是高度冗余的。
class_exists 两次?一次自动加载(如果有自动加载器),一次检查自动加载器是否成功?
class_exists的返回值
class_exists 查看自动加载是否成功,然后检查该类是否存在?我没有看到这种行为记录在案。
true 或省略时调用 class_exists 时该类不存在,您应该考虑自动加载器失败
您必须检查class_exists 两次。
我的工作代码是:
$autoload = spl_autoload_functions() ? true : false; // spl_autoload_functions can return array, empty array or false, but we need boolean
$should_include = $autoload ? class_exists($className, true) : true;
if($should_include && !class_exists($className, false)){ // make sure the class does not exist before including
if(is_readable($fileName)){
include_once($fileName);
} else {
throw new Exception('Could not include ' . $className);
}
}
这会在回退之前尝试使用先前定义的自动加载器。
【讨论】: