как работает автозагрузчик php

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

Как упоминалось выше: краткий обзор автозагрузчика Как работает автозагрузчик PHP

Автозагрузчик PHP рекурсивно ищет в определенных каталогах определения классов, трейтов и интерфейсов. Без какой-либо дополнительной настройки каталог, в котором находится требуемый файл, будет использоваться как путь к классу по умолчанию.

Имена файлов не должны подчиняться каким-либо соглашениям. Во всех файлах выполняется поиск определений классов. Предпочтительны файлы, которые похожи на имя класса или заканчиваются на .php или .inc. Если поддерживается, PHP Tokenizer будет использоваться для надежного обнаружения определений классов.


person meWantToLearn    schedule 16.09.2012    source источник
comment
похоже, что ссылка в вашем вопросе достаточно хороша, чтобы знать   -  person NullPoiиteя    schedule 16.09.2012
comment
Открывает ли автозагрузчик класса php файл и проверяет имя класса? -- он ищет все классы в файле.   -  person zerkms    schedule 16.09.2012
comment
а где можно узнать как это реализовано, с нуля весь процесс автозагрузчика это то что мне интересно как его впервые написали   -  person meWantToLearn    schedule 16.09.2012
comment
Исходный код PHP. Однако удачи в попытках пройти по нему.   -  person BoltClock    schedule 16.09.2012
comment
Почему @BoltClock, вы знаете, что это очень весело там, в исходной земле.   -  person Jared Farrish    schedule 16.09.2012
comment
@Jared: Почему я раньше не слышал об OpenGrok? Это выглядит потрясающе.   -  person BoltClock    schedule 16.09.2012
comment
@BoltClock - Да пребудет с вами Грок сейчас и навсегда. На удивление легко было найти определение.   -  person Jared Farrish    schedule 16.09.2012


Ответы (1)


Автозагрузчик PHP — это всего лишь механизм для включения файла при создании класса.

Если вы поместите все свои классы в 1 файл, вам не нужен автозагрузчик. Конечно, при программировании объектно-ориентированного программирования вы даете каждому классу свой собственный файл, и здесь в дело вступает автозагрузчик.

Некоторые примеры:

class AutoLoader
{  
  public function __construct()
  {
    spl_autoload_register( array( $this, 'ClassLoader' ));
  }

  public function ClassLoader( $class )
  {    
    if( class_exists( $class, false ))
      return true;

    if( is_readable( 'path_to_my_classes/' . $class . '.php' ))
          include_once 'path_to_my_classes/' . $class . '.php'
  }
}

$autoloader = new AutoLoader();

Здесь происходит следующее: когда создается класс автозагрузчика, метод класса Classloader регистрируется как автозагрузчик.

Когда создается новый класс, метод Classloader сначала проверяет, загружен ли файл для класса. Если нет, классу предшествует путь и расширяется расширением. Если файл доступен для чтения, он включается.

Конечно, вы можете сделать это очень изощренным. Давайте рассмотрим пример с пространствами имен и картографом. Предположим, мы находимся в классе автозагрузчика:

  private $mapper array( 'Foo' => 'path_to_foo_files/', 'Bar' => 'path_to_bar_files/');

  public function ClassLoader( $class )
  {    
    if( class_exists( $class, false ))
      return true;

    // break into single namespace and class name
    $classparts = explode( '\\', $class ); 
    $path = $this->mapper[$classparts[0]];

    if( is_readable( $path . $classparts[1] . '.php' ))
          include_once $path . $classparts[1] . '.php'
  }

Здесь имя класса разделено на часть пространства имен и части имени класса. Часть пространства имен просматривается в массиве сопоставления, и этот путь затем используется как путь включения для файла php.

Это всего лишь примеры, демонстрирующие, что можно сделать с помощью автозагрузчика. Для производства необходимо выполнить еще кое-что, например, проверку ошибок.

person JvdBerg    schedule 16.09.2012