我正在更新我的代码并尝试使用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();
任何帮助都非常感谢,提前感谢!
答案 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