Php 是否为自动加载类的父类调用_autoload()?
在Php 是否为自动加载类的父类调用_autoload()?,php,inheritance,autoload,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 pro
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();
}
我可以看到
\uu autoload
函数调用Triangle.php
,但它是否同时调用Shape.php
。我想你可以通过简单地添加一个
echo "loaded $class!\n";
对您的“自动加载处理程序”的语句?否(不是在同一时间),但是是(它将被加载,并且一切都将工作)
当您调用new Triangle
时,它将看到Triangle是一个尚未加载的类,因此它调用\uu autoload()
。这将需要一次
Triangle.php文件
在解析Triangle.php时,它看到还有另一个类尚未加载(Shape),因此它会重复该过程
简言之,您所需要做的只是您所拥有的,但它会通过多次传递来完成。每次找不到类定义时,都会执行自动加载 在您的例子中,它将首先为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
+1但省略括号(即注释),您的第一句话是“不,但是”
:)呵呵,是的,这是故意的。“不”的回答正是我所问的,“是”的回答正是我所想的。