我使用自动加载器来包含类。我现在正在做的是使用“glob”来读取不同的dir并将它们推入数组中。有更好的解决方案吗?
$path = './';
$files = array_merge(
glob($path.'includes/classes/system/*.class.php'),
glob($path.'includes/classes/system/baseclasses/*.class.php'),
glob($path.'includes/classes/system/systementities/*.class.php'));
编辑:
我在autoload类中使用它。问题是我必须用glob搜索文件。有更快的方法吗?
答案 0 :(得分:1)
每当您尝试使用PHP不了解的类时,都会触发自动加载。如果您使用include
/ require
,PHP将遍历您在PHP.ini中为include_path
指定的所有目录,因此没有理由使用glob
。在您的情况下,将include_path
设置为
/path/to/includes/classes/system/
最快包含文件的方式是使用class2file map。但是,这需要您创建此类映射并在修改应用程序时保持更新。
答案 1 :(得分:1)
PHP已经为您解决了这个问题。使用PHP的built-in autoloader。当语言/框架为您提供时,永远不要自己动手。
答案 2 :(得分:0)
function __autoload($class) {
$classfile = $class.'.class.php';
$path = './includes/classes/system/';
if (is_file($path.$classfile)) require_once($path.$classfile);
if (is_file($path.'baseclasses/'.$classfile)) require_once($path.'baseclasses/'.$classfile);
if (is_file($path.'systementities/'.$classfile)) require_once($path.'systementities/'.$classfile);
}
...这仍然不是最好的方式,但它可以让你使用glob()。如果您通常加载所有系统,则应该在boot / config脚本中有一个硬编码的require()列表。关于如何组织和获取类文件有很多选项。为了减少搜索脚本的时间,您可以将filetree视为一个接口。为简单起见,您可以将所有非必需类放在同一个文件夹中,将is_file()调用减少为一个。
在我的系统中,我将对象类分组在文件夹中,并带有各自的控制脚本和视图。我的__autoload()函数有一个更简单的工作 -
$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);