Автозагрузка классов с namespace
Всем привет))
Сегодня я опишу как можно организовать автоматическую загрузку классов с помощью пространств имен (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 должен повторять файловую структуру сайта
URL:
https://visavi.net/articles/527