0

我使用自动加载器来包含类。我现在正在做的是使用“glob”来读取不同的目录并将它们推送到一个数组中。有没有更好的解决方案?

$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'));

编辑:

我在自动加载类中使用它。问题是我必须使用 glob 搜索文件。有没有更快的方法来做到这一点?

4

3 回答 3

1

每当您尝试使用 PHP 不知道的类时,都会触发自动加载。如果您使用include/ require,PHP 将遍历您include_path在 PHP.ini 中为您指定的所有目录,因此没有理由使用glob. include_path在您的情况下,将其设置为就足够了

/path/to/includes/classes/system/

包含文件的最快方法是使用class2file 映射。但是,这需要您创建这样的地图并在修改应用程序时保持更新。

于 2010-11-20T18:32:04.620 回答
1

PHP 已经为您解决了这个问题。使用 PHP 的内置自动加载器。当语言/框架为您提供时,切勿自行滚动。

于 2010-11-20T18:32:20.860 回答
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()。如果您通常加载所有系统实体,则在引导/配置脚本中应该有一个硬编码的 require() 列表。关于如何组织和获取类文件有很多选择。为了减少搜索脚本的时间,您可以将文件树视为一个接口。为简单起见,您可以将所有非强制性类放在同一个文件夹中,将 is_file() 调用减少到一个。

在我的系统中,我将对象类与它们各自的控制脚本和视图分组在文件夹中。我的 __autoload() 函数有一个更简单的工作——

$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
于 2010-11-20T20:12:21.390 回答