【问题标题】:What's wrong with my autoloader?我的自动加载器有什么问题?
【发布时间】:2013-08-05 04:43:14
【问题描述】:

我正在尝试注册一些自动加载器,但我收到了 HTTP 500。我的错误日志显示如下:

[05-Aug-2013 04:32:38 UTC] PHP 致命错误:未捕获的异常 'LogicException' 与消息'功能'Autoloader::config' 不是 可调用(不应调用非静态方法 Autoloader::config() 静态)'在/home2/canforce/public_html/index.php:5

错误日志的末尾有一些堆栈跟踪部分,但它以大字母显示,所以我把它拿出来,我认为它不重要。

我认为我的自动加载器应该可以根据我阅读的内容工作,但由于某种原因它不能正常工作,下面是代码:


index.php

include("config/autoloader.php");
spl_autoload_register('Autoloader::config');
spl_autoload_register('Autoloader::controller');
spl_autoload_register('Autoloader::service');



config/autoloader.php

class Autoloader {
function config($class) {
    $file = 'config/' . $class . '.php';
    if(file_exists($file)) {
        require_once $file;
    }
}
function controller($class) {
    $file = 'presentation/controllers/' . $class . '.php';
    if(file_exists($file)) {
        require_once $file;
    }
}
function service($class) {
    $file = 'model/services/' . $class . '.php';
    if(file_exists($file)) {
        require_once $file;
    }
}
}

【问题讨论】:

  • 错误消息告诉您解决问题所需的一切。您正在静态调用非静态函数。
  • @Maerlyn 你是对的,如果我读得更仔细一点就好了。经过一整天的编码,所有这些 txt 和大词让我有点不知所措:/ 这很有意义并且有效,但奇怪的是,我阅读的所有文档都没有显示您必须实例化它。

标签: php require autoload spl spl-autoload-register


【解决方案1】:

您需要创建Autoloader 类的实例,然后将其传递给注册函数。

include("config/autoloader.php");
$autoloader = new Autoloader();
spl_autoload_register(array($autoloader, 'loader'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多