在类中实现__autoload

时间:2012-05-25 06:01:51

标签: php autoload

有没有办法在类中定义__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";
    }
}

输出:

Instantiating Test
Loading AnotherClass
Instantiating AnotherClass

3 个答案:

答案 0 :(得分:1)

不,__autoload函数必须是全局的。

但是,SPL可以将任何可调用注册为自动加载功能:spl_autoload_register()。虽然使用类方法没有多大意义 - 你可能只是创建实例,注册方法而不再使用该实例。

答案 1 :(得分:1)

此页面包含有关如何在类中实现自动加载的信息(PHP手册)spl_autoload_register

答案 2 :(得分: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';
    }
}