我有相当多的*.class.php
文件在我的/classes
目录。随着应用程序的更新,这些可能会发生变化,可能会添加更多内容,也可能会删除一些内容。
我有一个文件,加载每个页面加载,其中包括所有必要的文件。现在,我正在做这个:
$files = glob($site->settings->root_path.'/classes/*.{php}', GLOB_BRACE);
foreach ($files as $file) {
require_once($file);
}
这是否比单独指定每个文件慢得多?如:
require_once('/path/to/file1.php');
require_once('/path/to/file2.php');
require_once('/path/to/file3.php');
我之所以问这个问题,是因为我想我记得一段时间以前的一些事情,这些事情让我相信遍历文件/文件夹是一个痛苦而缓慢的过程,但我没有办法确定。
编辑:如果有人有比glob
更好的建议,我很高兴输入。
回答您的问题:是的,它肯定会更慢,只是因为您首先必须获得文件列表,然后执行require_once
,这将对文件系统进行另一次访问,以检查文件是否实际存在。
但我认为这是一种错误的做法。你要做的是通过自动加载来实现的。
基本上,您必须定义一个函数,当脚本想要访问未定义的类时,该函数将尝试从文件系统加载文件。然后,该函数将类的名称(带有名称空间)映射到文件系统上的文件,并尝试加载该文件。这样,您就不必担心文件夹中有多少文件,以及它们添加或删除的频率。
只是为了补充这里已经有的内容,自动加载的PHP文档有以下代码段(但是稍微编辑了一下),它应该非常适合您所做的。
function my_autoloader($class) {
require_once 'classes/' . $class . '.php';
}
spl_autoload_register('my_autoloader');
例如,如果你在classes/ClassA.php中有一个名为ClassA的类,只需像手动需要它一样构造ClassA。它应该能正常工作。希望这对你有帮助!