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

回到顶部