7

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

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

它有效,但我想延迟加载类。

4

3 回答 3

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(); 
?>
于 2012-05-17T12:08:30.647 回答
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');
于 2012-05-17T13:56:03.263 回答
1

首先,如果最好使用spl_autoload_register()(检查 php 手册中的自动加载说明)。

然后回到你的问题;仅当 display() 函数与employeeModel 位于同一目录中时,它才会起作用。否则,使用绝对路径(另见include()include_path 设置

于 2012-05-17T12:07:52.597 回答