【发布时间】:2009-08-24 18:38:56
【问题描述】:
我的自动加载器有问题:
public function loadClass($className) {
$file = str_replace(array('_', '\\'), '/', $className) . '.php';
include_once $file;
}
如您所见,它非常简单。我只是推断出类的文件名并尝试包含它。我有一个问题;尝试加载不存在的类时出现异常(因为我有一个引发异常的错误处理程序)。这很不方便,因为当您在不存在的类上使用 class_exists() 时也会触发它。您不希望那里出现异常,只返回“false”。
我之前通过在包含之前添加一个 @ 来解决此问题(抑制所有错误)。但是,这样做的最大缺点是,此包含中的任何解析器/编译器错误(致命的)都不会显示(甚至在日志中也不会显示),从而导致难以找到错误。
同时解决这两个问题的最佳方法是什么?最简单的方法是在自动加载器中包含这样的内容(伪代码):
foreach (path in the include_path) {
if (is_readable(the path + the class name)) readable = true;
}
if (!readable) return;
但我担心那里的表现。会不会很痛?
(已解决)是这样的:
public function loadClass($className) {
$file = str_replace(array('_', '\\'), '/', $className) . '.php';
$paths = explode(PATH_SEPARATOR, get_include_path());
foreach ($paths as $path) {
if (is_readable($path . '/' . $file)) {
include_once $file;
return;
}
}
}
【问题讨论】:
标签: php error-handling autoload