PHP中的延迟加载类

use*_*o01 7 php

我想懒惰加载类但没有成功

<?php

class Employee{

    function __autoload($class){

        require_once($class);
    }


    function display(){

        $obj = new employeeModel();
        $obj->printSomthing();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在当我做这个

function display(){
            require_once('emplpyeeModel.php');
            $obj = new employeeModel();
            $obj->printSomthing();
        }
Run Code Online (Sandbox Code Playgroud)

它的工作原理,但我想懒得加载这个类.

Vla*_*mos 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();
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

从php手册中取的示例:

<?php
function __autoload($class_name) {
    include $class_name . '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2(); 
?>
Run Code Online (Sandbox Code Playgroud)

  • @sprain他应该编写一个名为其他东西的自动加载函数,可能是他所做的类的一部分,然后调用`spl_autoload_register`.想象一下,这段代码位于一个巨大的网站上,网页上有许多纵横交错的依赖关系.如果有人已经在未经测试的应用程序上使用了`__autoload`,恰好包含了他正在定义另一个`__autoload`的文件,该怎么办? (3认同)

Exp*_*lls 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');
Run Code Online (Sandbox Code Playgroud)