0

私は次のクラス階層を持っていますMDLUser:MDLPersistentObject

MDLPersistentObject配列を返す静的メソッドがあります。ではMDLUser、静的メソッドをオーバーライドして、MDLPersistentObjectの配列を返し、独自のデータを追加してから、新しい配列を返します。

しかし、parent::myArrayReturningMethod()内部MDLUserで呼び出すと、 の実装が返されるだけですMDLUser(つまり、 の配列データが欠落していますMDLPersistentObject。ただし、悪い習慣の方法で を呼び出すと、MDLPersistentObject::myArrayReturningMethod()期待どおりの結果が返されます。

parent::静的メソッドの親実装を呼び出すための正しい遅延静的バインディング メソッドではありませんか?

私のコードがどのように見えるか疑問に思っている場合:

MDLPersistentObject のメソッド:

static public function Neo4j_Labels_In_Client( Everyman\Neo4j\Client $client )
{
    //
    //  Create a label called `MDLPersistentObject`
    //

    $mdlobject_label = $client->makeLabel( get_called_class() );


    //
    //  Return the label in an array
    //

    $labels = Array(
        $mdlobject_label
    );

    return $labels;
}

MDLUser のメソッド:

static public function Neo4j_Labels_In_Client( Everyman\Neo4j\Client $client )
{
    //
    //  Get the parent labels
    //

    $labels = parent::Neo4j_Labels_In_Client( $client );

    //
    //  Add the new labels
    //

    $user_label = $client->makeLabel( get_called_class() );

    array_push( $labels, $user_label );


    //
    //  Return labels
    //

    return $labels;
}
4

0 に答える 0