PHP自动加载磁带机:忽略不存在包括
我有我的自动加载一个问题:PHP自动加载磁带机:忽略不存在包括
public function loadClass($className) { $file = str_replace(array('_', '\\'), '/', $className) . '.php';
include_once $file;
}
正如你所看到的,这是很简单的。我只是推断出这个类的文件名并尝试包含它。我虽然有一个问题;当试图加载一个不存在的类时,我得到一个异常(因为我有一个抛出异常的错误处理程序)。这很不方便,因为当您在不存在的类上使用class_exists()时它也会被触发。你不想在那里发生异常,只是返回一个“假”。
我在前面加入了一个@(禁止所有错误),解决了这个问题。然而,这样做的一大缺点是,这个包含的任何分析器/编译器错误(这是致命的)都不会出现(即使在日志中也是如此),导致很难发现错误。
什么是同时解决这两个问题的最佳方法?最简单的方法是将包括在自动装(伪)是这样的:
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;
}
}
}
回答:
它只会被调用每班一次,所以性能不应该是一个问题。
回答:
public function loadClass($className) { $file = str_replace(array('_', '\\'), '/', $className) . '.php';
if(is_readable($file))
include_once $file;
}
is_readable不会产生巨大的性能差异。
回答:
class_exists()具有第二个参数autoload
,当它设置为FALSE时,将不会触发非易失类的自动装载器。
回答:
(解决)发这样的:
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自动加载磁带机:忽略不存在包括 的全部内容, 来源链接: utcz.com/qa/264359.html