自動ロードされたクラスの親クラスに対して__autoload()が呼び出されますか?
-
07-07-2019 - |
質問
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
を同時に呼び出しますか?
解決
いいえ(同時ではなく正確)が、はい(ロードされ、すべてが機能します)。
new Triangle
を呼び出すと、Triangleはまだロードされていないクラスであるため、 __ autoload()
を呼び出します。これにより、Triangle.phpファイルが require_once
されます。
Triangle.phpの解析で、ロードされていない別のクラス(Shape)があることがわかるので、プロセスを繰り返します。
要するに、あなたが持っていること以上にあなたがする必要があることはありませんが、それはいくつかのパスでそれをします。
他のヒント
はい、そうです。単に追加することでそれを確認できると思います
echo "loaded $class!\n";
__ autoloadハンドラーへのステートメント?
autoloadは、クラス定義が見つからないたびに実行されます。
あなたの場合、最初に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
所属していません StackOverflow