Вопрос

Я использую автозагрузчик для включения классов.Сейчас я использую «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.Есть ли более быстрый способ сделать это?

Это было полезно?

Решение

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

/path/to/includes/classes/system/

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

Другие советы

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

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);
}

... Что еще не самым величайшим образом, но он приводит вас к использованию глобата (). Если вы обычно загружаете все свои подключения, там должен быть жесткий кодированный список () в скрипте загрузки / конфигурации. Есть много вариантов о том, как организовать и получать файлы классов. Чтобы уменьшить время поиска скриптов, вы могли бы подумать о вашем FileTreee как интерфейс. Для простоты вы можете поставить все не обязательные классы в той же папке, уменьшая вызовы IS_File () до одного.

В моей системе у меня есть классы объектов, сгруппированные в папках с соответствующими сценариями управления и представлениями. Моя функция __autoload () имеет более простую работу -

$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top