Автозагрузка классов с 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 должен повторять файловую структуру сайта

Автор статьи: Олег (29.01.14 / 02:07)
namespace, spl, autoload, class
Рейтинг: -2
Просмотров: 3024
Комментарии (5) »