1

したがって、私の理解では、クラスに渡される可能性のある複数のオブジェクトをヒントとして入力することはできません。だから私はこれを理解するためにリフレクションAPIを活用できると考えました。一般的には悪い習慣かもしれませんが、それはそれです。とにかく、これは基本的に私のレイアウトです。リフレクション クラスを使用せずに、複数のクラスを型ヒントする方法はありますか? これはこの状況を処理する良い方法ですか?

interface Power { }

class mPower implements Power { }

class cPower implements Power { }

class Model extends ApiModel {

    function __construct(stdClass $powerObj) {

         $po = new ReflectionClass($powerObj);      
         if ( in_array('Power', $po->getInterfaceNames()))  {
            // do something
         }

    }
}
4

3 に答える 3

2

instanceofオペレーターはどうですかhttp://php.net/manual/en/language.operators.type.php

function __construct($powerObj) {
    if($powerObj instanceof Power) {
        //Do stuff
    }
}

また、すべてが共通のインターフェースを共有しているためです。次のことをタイプヒントできます。

function __construct(Power $powerObj) {
        //Do stuff
}
于 2013-06-20T18:20:53.103 に答える
1

ただし、インターフェイスでタイプヒントを実行できます...あなたの例では

function __construct(Power $powerObj) {

}
于 2013-06-20T18:22:17.720 に答える
0

これに使えますis_a()。反省は全く必要ありません。is_a()オブジェクトの親クラスと実装されたインターフェースをチェックするために機能します。

interface A {
}

class B implements A {
}


$b = new B();
var_dump(is_a($b, 'A')); // bool(true)
于 2013-06-20T18:22:56.593 に答える