JM at Work
JM at Work

Reputation: 2437

How to autoload PHP 5.3 classes?

I am trying to autoload my PHP 5.3 namespaced classes eg.

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

I did

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);

        });
    }
}

Problem is sometimes I get classname as User sometimes KM\User how can I fix this?

Upvotes: 1

Views: 2197

Answers (1)

mario
mario

Reputation: 145482

The $classname you receive in your callback function will be assumed to be local. That's because you have defined your __autoloader within a namespace.

To always get the absolute / fully qualified namespace and class name, declare your autoloader in the global scope. http://www.php.net/manual/en/language.oop5.autoload.php#87985

Upvotes: 1

Related Questions