我想延迟加载类但没有成功
<?php
class Employee{
function __autoload($class){
require_once($class);
}
function display(){
$obj = new employeeModel();
$obj->printSomthing();
}
}
现在我做这个
function display(){
require_once('emplpyeeModel.php');
$obj = new employeeModel();
$obj->printSomthing();
}
它有效,但我想懒得加载这个类。
答案 0 :(得分:6)
__ autoload 是一个独立的函数,而不是类的方法。您的代码应如下所示:
<?php
class Employee{
function display(){
$obj = new employeeModel();
$obj->printSomthing();
}
}
function __autoload($class) {
require_once($class.'.php');
}
function display(){
$obj = new Employee();
$obj->printSomthing();
}
<强>更新强>
取自php手册的例子:
<?php
function __autoload($class_name) {
include $class_name . '.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
答案 1 :(得分:4)
稍微更改Employee
:
class Employee {
public static function __autoload($class) {
//_once is not needed because this is only called once per class anyway,
//unless it fails.
require $class;
}
/* Other methods Omitted */
}
spl_autoload_register('Employee::__autoload');
答案 2 :(得分:1)
首先,如果最好使用spl_autoload_register()(请查看php手册中的说明进行自动加载)。
然后回到你的问题;只有当display()函数与employeeModel在同一目录下时才会起作用。否则,请使用绝对路径(另请参阅include()和include_path setting