PHP中的延迟加载类

时间:2012-05-17 12:02:08

标签: php

我想延迟加载类但没有成功

<?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();
        }

它有效,但我想懒得加载这个类。

3 个答案:

答案 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