Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否为自动加载类的父类调用_autoload()?_Php_Inheritance_Autoload - Fatal编程技术网

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但省略括号(即注释),您的第一句话是
“不,但是”
:)呵呵,是的,这是故意的。“不”的回答正是我所问的,“是”的回答正是我所想的。