__autoload()是否为自动加载类的父类调用?

时间:2009-09-14 07:43:39

标签: php inheritance autoload

main.php中,添加了自动加载并创建了一个新对象:

function __autoload($class) {
    require_once($class . '.php');
}
...
$t = new Triangle($side1, $side2, $side3);

Triangle.php

class Triangle extends Shape {...}

Shape.php是一个抽象类:

abstract class Shape {
    abstract protected function get_area();
    abstract protected function get_perimeter();
}

我可以看到__autoload函数调用Triangle.php,但它是否同时调用Shape.php

3 个答案:

答案 0 :(得分:8)

否(不是完全同一时间),但是(它会被加载,一切都会起作用)。

当你致电new Triangle时,它会看到Triangle是一个尚未加载的类,所以它会调用__autoload()。这将是require_once Triangle.php文件。

在解析Triangle.php时,它会看到还有另一个尚未加载的类(Shape),因此它会重复该过程。

简而言之,除了你所拥有的,你没有什么需要做的,但是它会在很多过程中完成。

答案 1 :(得分:2)

它应该,是的。我想你可以通过简单地添加一个

来验证
echo "loaded $class!\n";
<_>对__autoload处理程序的声明?

答案 2 :(得分:1)

每次无法找到类定义时都会执行自动加载。

在你的情况下,首先会调用Triangle,然后解析器在Triangle.php中遇到Shape的引用,然后自动加载Shape.php

<?php
function __autoload($class) {
    print "autoloading $class\n";
    require_once($class . '.php');
}

$t = new Triangle();

[~]> php test.php 
autoloading Triangle
autoloading Shape