Является ли __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 одновременно?

Related of "Является ли __autoload () для родительских классов автозагрузочных классов?"

Нет (не в то же время), но да (он загрузится и все будет работать).

Когда вы вызовете new Triangle он увидит, что Треугольник – это класс, который еще не загружен, поэтому он вызывает __autoload() . Затем это потребует файл require_once .

При разборе Triangle.php он видит, что есть еще один класс, который не был загружен (Shape), чтобы он повторил процесс.

Короче говоря, вам больше нечего делать, чем то, что у вас есть, но он делает это в нескольких проходах.

Да, должно быть. Я думаю, вы могли бы убедиться, что просто добавив

 echo "loaded $class!\n"; 

для вашего обработчика __autoload?

autoload выполняется каждый раз, когда определение класса не может быть найдено.

В вашем случае он будет сначала вызван для треугольника, тогда синтаксический анализатор встретит ссылку на Shape в Triangle.php и затем автоматически загрузит Shape.php

 <?php function __autoload($class) { print "autoloading $class\n"; require_once($class . '.php'); } $t = new Triangle(); [~]> php test.php autoloading Triangle autoloading Shape