Насколько понимаю, с появлением пространств имён, использование имён классов с нижними подчеркиваниями (class Module_ClassName) стало ненужным. И теперь вполне логичным было бы использование автоподгрузки классов в зависимости от используемого им пространства имён. То есть, для примера, нужный класс у нас лежит в каталоге /classes/Module/ClassName.class.php и в этом скрипте прописано пространство имён:
namespace Module;
Когда мы вызываем класс в скрипте, использующем глобальное пространство имён, мы пишем:
$foo = new Module/ClassName;
Тогда в данном клиентском коде можно использовать автозагрузчик следующего вида:
function __autoload($class)
{
require_once '/classes/'.$class.'.class.php';
}
По-моему, всё предельно просто. И мне кажется, что именно для этого предназначались пространства имён.
Но вот что делать, когда класс вызывается не из глобального пространства имён? Чтобы каким-то хитромудрым способом модифицировать загрузчик, чтобы он определял текущее пространство имён во время вызова и подставлял его в путь... Но вот проблема: объявление namespace почему-то убивает функцию __autoload (она просто не выполняется).
В общем, интересно, как можно организовать совместную работу пространств имён и автозагрузчика, чтобы:
1. Не использовать в скриптах бесконечные require для классов.
2. Не модифицровать include path.
3. Хранить все классы в одной папке classes, в подпапках соответствующих модулям.
В различных источниках (книгах, уроках, стандартах вроде PEAR) - полный разюрод и шатание, т. к. половина еще тащится за поддержкой старого кода без namespace. Я же планирую писать для себя, только под новые версии.
P. S. Задача состоит в в том, чтобы решить задачу без подключения сторонних библиотек/менеджеров и т. п.