Как автоматически загружать классы PHP 5.3? - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь автоматически загрузить классы пространства имен PHP 5.3, например.

/JM
    Auth.php
    User.php
    Db/Entity.php
    / ...

Я сделал

namespace KM;

class Autoloader {
    public static function registerAutolaod() {
        ini_set('include_path', dirname(__FILE__) . PATH_SEPARATOR . ini_get('include_path'));
        spl_autoload_register(function ($classname) {
            $file = preg_replace('/\\\/', DIRECTORY_SEPARATOR, $classname) . '.php';
            echo $file . '<br />';
            include ($file);

        });
    }
}

Проблема в том, что иногда я получаю имя класса как User иногда KM\User, как я могу это исправить?

1 Ответ

1 голос
/ 13 июня 2011

$classname, полученное вами в функции обратного вызова, будет считаться локальным.Это потому, что вы определили свой __autoloader в пространстве имен.

Чтобы всегда получать абсолютное / полностью определенное пространство имен и имя класса, объявите свой автозагрузчик в глобальной области видимости.http://www.php.net/manual/en/language.oop5.autoload.php#87985

...