PHP Пространство имен и автозагрузка классов

Редакция автор: stain

Интересно что namespace обязательно должен присутствовать в файле класса, а доступ к нему производится или установкой пространства имен или указанием полного имени класса или имени класса относительно установленного пространства имен.

Автозагрузка и зависимое от иерархии каталогов пространство имен. Классы, предполагается располагать по стандарту PSR-4.

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

Загрузчик AutoPSR-4.php


Пример обращения к функциям классов в файле index.php

test();
Z\Zed::test(); //расположен в models\Z\Zed.php
\controllers\Xclass::test(); // расположен вне текущего пространства имен в controllers\Xclass.php

Пример класса controllers\Xclass.php

класс Xclass';
    }
}

Вариант загрузчика в котором расположение файлов не имеет столь жесткой привязки.

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


Автозагрузчик composer`a.

Подключение через композер, предполагает запихивание всего апликейшена в папку, связывание с именем проекта, а следовательно все неймспейсы преобрели дополнительный прификс \Проект, и стал выглядеть подобным образом \Проект\сабнеймспейс\класс, т.е. нужно для нормального функционирования, переименовывать во всех файлах проекта пространство имен, внедряя имя проекта, но чтобы не менять в глубинах кода используемые классы, можно добавить указатель на пространство имен use.

Теперь в начале каждого класса пишем используемое пространство имён. У основных классов это:


А у контроллеров:



Обязательно следует добавить в файл проекта composer.json, связку имени вашего проекта с каталогом где вы его держите.

"autoload": {
        "psr-4": {
            "YourGitHubName\\NameProject\\": "public_html/"
        }
}

После этого нужно выполнить команду php composer.phar update, чтобы подключились пути автозагрузчика.

Тутто, тут, тут и тут можно подчерпнуть дополнительную информацию.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.