如何自动加载 PHP 5.3 类?
我正在尝试自动加载我的 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
我该如何解决这个问题?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您在回调函数中收到的
$classname
将被假定为本地的。那是因为您已经在命名空间中定义了 __autoloader。为了始终获得绝对/完全限定的命名空间和类名,请在全局范围内声明您的自动加载器。 http://www.php.net/manual/en/language .oop5.autoload.php#87985
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