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 に答える