Автозагрузка классов с namespace (Рейтинг: -2)

Печать RSS
Всем привет))
Сегодня я опишу как можно организовать автоматическую загрузку классов с помощью пространств имен (namespace) точнее как это организовал я))
Итак как и везде наш проект имеет индескную страницу которая лежит в самом корне проекта (не зависимо от того в какой директории находится сам проект) так вот сначала мы и вычислим эту директорию. Для этого пропишем в нашем индексном файле следующее
<?php
define('DOCROOT', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR);
?>
константа DOCROOT будет содержать полный путь к корневой директории.
затем нам нужно сохранить путь к корневой директории в include_path
<?php
set_include_path(DOCROOT);
?>
далее мы должны вызвать функцию регистрации автоматической загрузки классов
<?php
spl_autoload_register();
?>
но так как данный способ поддерживает автозагрузку классов только в нижнем регистре мы зарегистрируем "свою" функцию загрузки:
<?php
spl_autoload_register(function ($class) {
    include_once DOCROOT . str_replace('\\', '/', $class).'.php';   
});
?>
Давайте теперь проверим нашу функцию на работоспособность.
Для начала создадим в корневой директории проекта папку test и затем этой папке создадим класс Test*
<?php
namespase test;

class Test {
   function __construct() {
       echo 'Все работает';
   }
}
?>
и теперь попробуем вызвать класс тест
<?php
new \test\Test();
?>
и перейдя по адресу vacsh_proect.ru вы должны увидеть
Все работает
Вот в принципе и все))
*UPD 03.08.14
все классы должны быть в отдельных файлах, а их ns должен повторять файловую структуру сайта
Добавил:
Рейтинг: -2
Просмотры: 3733
Комментарии (5) »