0

ORM クラスを使用しています。DB 内の各テーブルは、ORM クラスのサブクラスを使用して表されます。

私は PHP インターフェイスを使用しており、ORM サブクラスの一部で必要なメソッド (db フィールド) を指定したいと考えています。インターフェイスに関数を追加するには、メソッドをクラスで明示的に宣言する必要があります。ただし、これらのメソッドは、実行前の ORM は DB 構造を認識できないため、実際の機能については魔法のメソッドに依存しています。

私が想像していたのは、親クラスから結果を返すそれぞれの関数を作成することでした。

検討:

class ORM
{
    // Library code here. Can't change this.

    public function __call($name, $arguments)
    {
        return call_user_func_array(array($this, $method), $arguments);
    }
}

interface MyTableInterface
{
    public function myDbField();
}

class MyTable extends ORM implements MyTableInterface
{
    public function myDbField()
    {
        return parent::myDbField();
    }
}

このコードでparent::myDbField()、クラスから呼び出すとMyTable、正しく ORM クラスに移動し、__callマジック メソッドを使用します。ここで$thisequalsを実行すると、独自のロジックを開始して DB から情報を取得する代わりにMyTable、クラスから元の関数が呼び出されます。MyTable

この再帰を回避するにはどうすればよいですか?

4

2 に答える 2

0

メソッドの呼び出しは、メソッドが見つからない場合にのみ呼び出されます。あなたの例では、メソッドがサブクラスで見つかったため不可能です

于 2013-11-14T09:39:54.190 に答える