Вопрос о простом автозагрузчике PHP - PullRequest
4 голосов
/ 23 июля 2010

Я только изучал пространства имен PHP и начинал создавать простую функцию автозагрузки.O сделал следующее:

function __autoload($name) {
  echo $name . "<br />";
  require_once $name . ".php";
}

Итак, это работает, если я не использую какие-либо псевдонимы или операторы импорта, например.use MainNamespace\Subnamespace потому что, если я это сделал, при условии, что у меня есть:

\GreatApp\Models\User.php
\GreatApp\Models\Project.php
\GreatApp\Util\Util.php
\GreatApp\Util\Test\Test.php

, если я попытаюсь сделать:

new GreatApp\Models\User();

, это работает, потому что $name в автозагрузке станет GreatApp\Models\Userтак что GreatApp\Models\User.php найдено.Но когда я делаю:

use GreatApp\Models;
new User();

, это терпит неудачу, потому что теперь $name это просто User, а User.php не будет найдено.Как мне настроить автозагрузку тогда?

1 Ответ

1 голос
/ 23 июля 2010

Полный путь к пространству имен всегда передается автозагрузчику независимо от того, как вы импортируете пространство имен и ссылаетесь на класс.Он должен работать.

Только сама функция __autoload должна принадлежать основному (корневому) пространству имен

...