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

另一个类.php:

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

输出:

实例化测试
加载另一个类
实例化另一个类
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 回答