0

クラスで定義できる方法はありますか?__autoload未定義のクラスにアクセスするたびに、PHPは__autoloadクラスメソッドを実行しますか?

<?php 
class Test {
    public function __construct() {
        echo 'Instantiating ', __CLASS__, "\n";
    }

    public function __autoload($className) {
        echo "Loading $className\n";
        require_once($className . '.php');
    }

    public function test() {
        $test = new AnotherClass();
    }
}

$bill = new Test();
$bill->test();

AnotherClass.php:

<?php
class AnotherClass {
    public function __construct() {
        echo 'Instantiating ', __CLASS__, "\n";
    }
}

出力:

テストのインスタンス化
AnotherClassの読み込み
AnotherClassのインスタンス化
4

3 に答える 3

1

いいえ、__autoload関数はグローバルである必要があります。

ただし、呼び出し可能オブジェクトを自動ロード関数としてSPL登録する方法があります。ただし、クラスメソッドを使用することはあまり意味がありません。おそらく、インスタンスを作成し、メソッドを登録して、そのインスタンスを二度と使用しないでしょう。spl_autoload_register()

于 2012-05-25T06:03:03.870 に答える
1

このページには、クラスに自動ロードを実装する方法に関する情報があります(PHPマニュアル)spl_autoload_register

于 2012-05-25T06:04:15.710 に答える
0

これは動作します!!!

class ClassAutoloader {
    public function __construct() {
        spl_autoload_register(array($this, 'loader'));
    }
    private function loader($className) {
        echo 'Trying to load ', $className, ' via ', __METHOD__, "()\n";
        include $className . '.php';
    }
}
于 2012-05-25T06:12:07.360 に答える