自動ロードされたクラスの親クラスに対して__autoload()が呼び出されますか?

StackOverflow https://stackoverflow.com/questions/1420174

  •  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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top