1

エラーをスローせずにこれをテストする方法、または「@」を使用する方法は?

有効にすることができます:

$foo->bar_x;

また

$foo->bar()->x();

私は次のようなものが必要です:

if(($foo->bar()->x()))
   echo $foo->bar()->x();

if(($foo->bar_x))
   echo $foo->bar_x();
4

1 に答える 1

3
$bar = $foo->bar();
if (method_exists($bar, 'x')) {
    echo $bar->x();
}

if (property_exists($foo, 'bar_x')) {
    echo $foo->bar_x;
}

もちろん、オブジェクトのメソッドを呼び出すことができるほど型がよくわからないオブジェクトを扱うのは良くありません。オブジェクトのクラス、メソッドが返すオブジェクトの種類、および使用可能なメソッドとプロパティを明確にする必要があります。定義されたインターフェイスは、OOP の重要なポイントです。

せいぜい、オブジェクトの種類に基づいて何を呼び出すかを決定する必要があります。

if ($foo instanceof SomeClass) {
    $foo->bar();
} else if ($foo instanceof SomeDefinedInterface) {
    $foo->baz();
}

できれば、既知のタイプのオブジェクトのみを処理することで、そのあいまいさがまったくないことをお勧めします。

function (SomeClass $foo) {
    $foo->bar();
}
于 2013-03-20T21:40:44.717 に答える