14

メソッドがPHPの子クラスによってオーバーライドされているかどうかを確認することは可能ですか?

<!-- language: lang-php -->

class foo {
    protected $url;
    protected $name;
    protected $id;

    var $baz;

    function __construct($name, $id, $url) {
        $this->name = $name;
        $this->id = $id;
        $this->url = $url;
    }

    function createTable($data) {
        // do default actions
    }
}

子クラス:

class bar extends foo {
    public $goo;

    public function createTable($data) {
        // different code here
    }
}

このクラスのメンバーとして定義されたオブジェクトの配列を反復処理する場合、どのオブジェクトが古いメソッドではなく新しいメソッドを持っているかを確認するにはどうすればよいですか? などの機能はありmethod_overridden(mixed $object, string $method name)ますか?

foreach ($objects as $ob) {
    if (method_overridden($ob, "createTable")) {
        // stuff that should only happen if this method is overridden
    }
    $ob->createTable($dataset);
}

私はテンプレート メソッド patternを認識していますが、プログラムの制御をクラスとメソッド自体から分離したいとしましょう。method_overriddenこれを達成するような機能が必要です。

4

2 に答える 2