__autoload() 在 PHP 中似乎没有做任何事情

发布于 2024-10-16 02:16:28 字数 1183 浏览 6 评论 0原文

我正在运行最新版本的 XAMPP,而 autoload() 似乎没有正常工作。我几乎用 PHP 手册中的自动加载替换了以前的自动加载,但没有效果。

在放置了一些 echo 和 die() 后,我得出的结论是 __autoload 根本没有被调用。

class Main
{

    var $config_data;

    function __autoload($class_name) {
        echo "hello.";
        // If the file exists, require it
        if (file_exists(SYSTEMDIR.$class_name.".".EXT)) {
            echo 'Autoloader: The class exists.';
            (require_once(SYSTEMDIR.$class_name.".".EXT))
                or die("I tried to autoload class $class_name, but it failed! =(");
        } else {
            // The file didn't even exist. Die.
            die("I was going to autoload class $class_name, but it didn't exist! =(");
        }

    }

    /*
     * Function __construct
     * @param datatype variable description
     * @return datatype description
     */
   function __construct(/* $arg */) {
       //Load the config

       $this->config = new Config;

       //Load the uri class:
       $this->uri = new Uri;
   }

}

它不会输出位于 __autoload() 最顶部的“hello”。

唯一的输出是:

致命错误:未找到类“Config” 在 E:\xampplite\htdocs\system\Main.php 在第 84 行

I'm running the latest version of XAMPP and autoload() doesn't seem to be working as it should. I pretty much replaced my previous autoload with the one from the PHP manual, but to no avail.

After putting a few echo's and die()s, I've concluded that __autoload isn't being invoked at all.

class Main
{

    var $config_data;

    function __autoload($class_name) {
        echo "hello.";
        // If the file exists, require it
        if (file_exists(SYSTEMDIR.$class_name.".".EXT)) {
            echo 'Autoloader: The class exists.';
            (require_once(SYSTEMDIR.$class_name.".".EXT))
                or die("I tried to autoload class $class_name, but it failed! =(");
        } else {
            // The file didn't even exist. Die.
            die("I was going to autoload class $class_name, but it didn't exist! =(");
        }

    }

    /*
     * Function __construct
     * @param datatype variable description
     * @return datatype description
     */
   function __construct(/* $arg */) {
       //Load the config

       $this->config = new Config;

       //Load the uri class:
       $this->uri = new Uri;
   }

}

It doesn't output the "hello" that is located at the very top of __autoload().

The only output is:

Fatal error: Class 'Config' not found
in E:\xampplite\htdocs\system\Main.php
on line 84

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

淡紫姑娘! 2024-10-23 02:16:28

AFAIK 函数 __autoload 必须在类外部定义。如果您想将自动加载功能实现为类的一部分,您应该使用回调和 spl_autoload_register

AFAIK function __autoload must be defined outside the class. If you want to implement autoload function as part of a class, you should use callback and spl_autoload_register

难如初 2024-10-23 02:16:28

那是因为您声明了 Main->__autoload() 函数(即类方法)而不是全局 __autoload()

That's because you declared a Main->__autoload() function (i.e. a class method) not a global __autoload()

寄居人 2024-10-23 02:16:28

__autoload 不会进入类中。它用于包含类所在的文件。

您需要向初始脚本添加一个自动加载函数才能让它执行任何操作。

__autoload doesn't go in the class. It's used to include the file the class is in.

You'll need to add an autoload function to the initial script to ever have it do anything.

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