14

オブジェクトが特定のクラスのセットの一部であるかどうかを確認するより短い方法はありますか?

を使用instanceofすると、ifステートメントが長くなりすぎます。

if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3)

そして、これは機能しません:

instance of \Class1 || \Class2 || \Class3

Class2一定であると仮定します。

4

3 に答える 3

9

IF ステートメントが長くなりすぎます

[...]

もっと短い方法はありますか

もちろん。

関数を作成するだけです:

function isOfValidClass($obj)
{
    $classNames = array('Class1', 'Class2');
    foreach ($classNames as $className) {
        if (is_a($obj, $className)) {
        return true;
    }

    return false;
}

その後、コードでそれを使用することができ、if ステートメントが「スペースを取りすぎる」ことを心配する必要はありません (問題を考慮する必要はありません。ステートメントは必要なだけ長くする必要があります)。

于 2012-05-29T16:15:11.500 に答える
8

要するに:いいえ

より長い答え: get_parent_class()recursive を使用してすべての親クラスをフェッチarray_intersect()し、1 つ以上のクラス名がそこに表示されるかどうかを調べるために使用する回避策を作成できます。ただし、クラスには共通点があるはずです。これをインターフェイスに入れ、これに対するテストを行います。

于 2012-05-29T16:02:38.073 に答える
1

外部メソッドにブール式を入れてIF文で呼び出すのが最短だと思います。

于 2012-05-29T16:01:59.820 に答える