Проблема
Полистав множество станиц в поисковых системах, статьях хабра неоднократно сталкивался с использованием spl_autoload_register. Загрузка файлов с классом почти всегда заключалась в использовании в качестве сепаратора каталогов символа "_". Вот в этом и проблема. В результате имя класса получается примерно «Some_text_to_my_file_name», что, собственно, просто выносит
Решение
Задача значительно упрощается, если начать использовать пространства имен. Вкратце, имя класса будет иметь вид Sometexttomyfilename, что более похоже на адрес файла и добавляет функционал пространства имен в процесс подгрузки.
spl_autoload
Autoload'ер изменит свой вид из:
spl_autoload_register(function($className) {
require_once( str_replace('_', '/', $className) . '.php' );
});
На подобный:
spl_autoload_register(function($className) {
require_once( str_replace('\', '/', $className) . '.php' );
});
Разница, собственно, не большая, но последствия, по-моему, значительные.
Практика
Допустим, у нас есть обычный Registry(php registry pattern). Он помещен в директорию ./Global/Registry.php и будет иметь вид:
<?php
namespace Global;
class Registry {
...
}
И для использования этого класса у нас будут варианты вызова:
- GlobalRegistry::getInstance()
- use GlobalRegistry;
Registry::getInstance(); - use GlobalRegistry as GRegistry;
GRegistry::getInstance();
Вывод
Суть проста, но такой вид гораздо удобнее использовать.
Хочу подчеркнуть, что идея не моя и на права не претендую.
Спасибо.
Автор: spein