在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
?
答案 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