Ленивые Классы Включает PHP - PullRequest
0 голосов
/ 20 ноября 2010

Я использую автозагрузчик для включения классов. То, что я делаю сейчас, использует "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'));

EDIT:

Я использую это внутри класса автозагрузки. Проблема в том, что я должен искать файлы с glob. Есть ли более быстрый способ сделать это?

Ответы [ 3 ]

1 голос
/ 20 ноября 2010

PHP уже решил эту проблему для вас. Используйте PHP встроенный автозагрузчик . Никогда не катайте свои собственные, когда язык / фреймворк предоставляет это вам.

1 голос
/ 20 ноября 2010

Автозагрузка будет запускаться всякий раз, когда вы пытаетесь использовать класс, который не знает PHP. Если вы используете include / require, PHP будет проходить через все каталоги, которые вы указали для include_path в PHP.ini, поэтому нет необходимости использовать glob. В вашем случае должно быть достаточно установить include_path на

/path/to/includes/classes/system/

Самый быстрый способ включения файлов заключается в использовании class2file map . Однако для этого необходимо создать такую ​​карту и обновлять ее при изменении приложения.

0 голосов
/ 20 ноября 2010
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);
...