3

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

4

3 に答える 3

8

いいえ(まったく同時にではありません)、しかしはい(ロードされ、すべてが機能します)。

呼び出すnew Triangleと、Triangleがまだロードされていないクラスであることがわかるので、を呼び出します__autoload()。これによりrequire_once、Triangle.phpファイルが作成されます。

Triangle.phpを解析すると、ロードされていない別のクラス(Shape)があることがわかり、プロセスが繰り返されます。

要するに、あなたが持っていること以上にあなたがする必要があることは何もありません、しかしそれは多くのパスでそれをします。

于 2009-09-14T07:47:41.120 に答える
2

はい、そうすべきです。を追加するだけで確認できると思います

echo "loaded $class!\n";

__autoloadハンドラーへのステートメント?

于 2009-09-14T07:47:02.107 に答える
1

クラス定義が見つからない場合は常に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
于 2009-09-14T07:49:57.450 に答える