PHP __autoload() с пространством имен

spl_autoload_register('Think\Think::autoload');

В пространстве имен Think \ я создал указанную выше функцию регистрации, когда я пытаюсь использовать класс, который не был включен, например класс Storeage, php предположительно передаст Storeage в качестве переменной для функции Think \ Think :: autoload, но на самом деле он передал Think \ Хранилище как переменная, почему оно добавляет в автозагрузку дополнительный Think\, а не просто Хранилище?

Означает ли это, что автозагрузка будет искать только те классы, которые объявлены в том же пространстве имен, где создана функция автозагрузки?


person user7031    schedule 18.01.2014    source источник


Ответы (1)


Функции автозагрузки обычно включают файлы по запросу. Так, например, у меня есть класс с именем Spell в пространстве имен Write и в write/spell.php. Поэтому я говорю своей функции автозагрузки, как найти файл (в этом случае мои каталоги отражают мое пространство имен).

Сама функция автозагрузки не заботится о пространствах имен как таковых. Он заботится о том, чтобы найти файлы, содержащие ваш класс, и загрузить их. Итак, чтобы ответить на ваш вопрос, ваша автозагрузка ограничит себя пространством имен, только если вы напишете для этого функцию.

Теперь, вот предостережение с тем, как вы это делаете. Ваша функция автозагрузки уже находится в пространстве имен. Это означает, что вам придется вручную включить файл, содержащий этот класс, иначе ваша автозагрузка не удастся.

person Machavity♦    schedule 18.01.2014