PHP spl_autoload_register什么都不做

时间:2012-08-30 22:14:12

标签: php oop autoload

我正在更新我的代码并尝试使用spl_autoload_register但是它简单不起作用! 我在Centos / Ubuntu / Win7上使用PHP 5.3.8 - Apache 2.22并试图回应一些东西,但我什么也没得到......一直试图让它在过去的3个小时内工作而没有结果...这是让我疯了!!!

class ApplicationInit {
    // Constructor
    public function __construct() {
        spl_autoload_register(array($this, 'classesAutoloader'));
        echo 'construct working...!';
    }

    // Autoloading methods
    public function classesAutoloader($class) {
        include 'library/' . $class . '.php';

        echo 'autoload working...!';
    }
}

来自__construct的第一个echo工作但是“classesAutoloader”根本不起作用,这个类在文件夹中的php文件中定义,我从index.php调用它,如下所示:

define('DS', DIRECTORY_SEPARATOR);
define('ROOT', getcwd() . DS);
define('APP', ROOT . 'application' . DS);

// Initializing application
require(APP.'appInit.php');
$classAuto = new ApplicationInit();

任何帮助都非常感谢,提前感谢!

2 个答案:

答案 0 :(得分:1)

好像你做错了。传递给spl_autoload_register的函数负责加载类文件。

您的代码正在调用

$classAuto = new ApplicationInit();

但到那时,ApplicationInit已经加载,因此无法调用自动加载功能

您可以通过更合理的方式致电

spl_autoload_register(function($class){
    include 'library/' . $class . '.php';
});

然后当你打电话

$something = new MyClass();

并且MyClass未定义,然后它将调用您的函数来加载该文件并定义该类。

答案 1 :(得分:1)

你有什么问题?您的代码工作正常。

class ApplicationInit {
    public function __construct() {
        spl_autoload_register(array($this, 'classesAutoloader'));
        echo 'construct working...!';
    }

    public function classesAutoloader($class) {
        include 'library/' . $class . '.php';

        echo 'autoload working...!';
    }
}

$classAuto = new ApplicationInit(); //class already loaded so dont run autoload

$newclass = new testClass(); //class not loaded so run autoload