-
26-09-2019 - |
题
我使用了自动加载机包括类。我在做什么,现在使用“水珠”读取不同目录的并在一个数组推动他们是。有没有更好的解决方案呢?
$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'));
编辑:
我用这种自动加载一个类的内部。问题是,我必须寻找与水珠的文件。是否有一个更快的方法来做到这一点?
解决方案
自动加载将被触发时,你要使用一类是不知道到PHP。如果您使用include
/ require
,PHP将继续通过所有你在php.ini您include_path
指定的目录,所以应该没有理由使用glob
。在您的情况下,它应该足以设置include_path
到
/path/to/includes/classes/system/
在最快的方式来包含文件。将使用 class2file地图 。然而,这需要你创建这样的地图,并保持更新,当你修改你的应用程序。
其他提示
PHP已经解决了这个问题你。使用PHP的内置自动加载。当语言/框架提供为你从来没有推出自己的。
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);
}
...这仍然不是最伟大的方式,但它使用水珠让你周围的()。如果你通常加载所有systementities的应该有一个启动/ config脚本硬编码的需要()列表。有关于如何组织并获取类文件很多的选择。为了减少时间寻找脚本,你可以认为你的文件树作为一个接口。为了简单起见,可以把所有非强制性类在同一文件夹,降低了is_file()调用向下到一个。
在我的系统具有在文件夹中与它们各自的控制脚本和视图分组的对象的类。我的__autoload()函数有一个简单的任务 -
$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
不隶属于 StackOverflow