spl_autoload_register('Think\Think::autoload');
В пространстве имен Think \ я создал указанную выше регистрационную функцию, когда я пытаюсь использовать класс, который не был включен как класс Storeage, php будет чересчур пропускать Storeage в качестве переменной для функции Think \ Think :: autoload, но она фактически передала Think \ Храните как переменную, почему она добавляет дополнительный Think \ к автозагрузке, а не только к Storeage?
Означает ли это, что autoload будет искать только классы, объявленные в том же пространстве имен, где создана функция автозагрузки?
Функции Autoload обычно работают, включая файлы для вас по требованию. Так, например, у меня есть класс Spell
в пространстве имен Write
и он находится в write/spell.php
. Поэтому я сообщаю функции автозагрузки, как найти файл (в этом случае мои каталоги отражают мое пространство имен).
Функция автозагрузки сама по себе не интересует пространства имен. Он заботится о том, чтобы найти файлы, которые содержат ваш класс, и загрузить их. Итак, чтобы ответить на ваш вопрос, ваша автозагрузка ограничится только пространством имен, если вы напишете функцию для этого.
Теперь, вот предостережение с тем, как вы это делаете. Функция автозагрузки уже находится в пространстве имен. Это означает, что вам придется вручную включить файл, содержащий этот класс, или ваша автозагрузка не удастся.
Вот вам пример.
loader.php
namespace bigpaulie\loader; class Loader { /** * DIRECTORY_SEPARATOR constatnt is predefined in PHP * and it's different for each OS * Windows : \ * Linux : / */ public static function load($namespace){ $filename = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . ".php"; if(file_exists($filename)){ require_once $filename; }else{ throw new \Exception("Error Processing Request", 1); } } }
index.php
require_once 'path/to/loader.php'; spl_autoload_register(__NAMESPACE__ . 'bigpaulie\loader\Loader::load'); $class1 = new \demos\Class1(); // or use bigpaulie\core\Class2; $class2 = new Class2();
как вы можете видеть, мы можем использовать любое пространство имен, которое нам нужно, чтобы убедиться, что существует путь к файлу класса.
Надеюсь это поможет!
С наилучшими пожеланиями, Пол.