如何自动加载 PHP 5.3 类?

发布于 2024-11-15 09:13:34 字数 642 浏览 0 评论 0原文

我正在尝试自动加载我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦在深巷 2024-11-22 09:13:34

您在回调函数中收到的 $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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文