オブジェクトが特定のクラスのセットに含まれているかどうかをチェックする方法はありますか? if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)
複数のinstanceofチェック
そして、これは動作しません:instanceofの使用
は、IF文が長すぎる可能 instance of \Class1 || \Class2 || \Class3
それが最短の道、私は思う
オブジェクトが特定のクラスのセットに含まれているかどうかをチェックする方法はありますか? if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)
複数のinstanceofチェック
そして、これは動作しません:instanceofの使用
は、IF文が長すぎる可能 instance of \Class1 || \Class2 || \Class3
それが最短の道、私は思う
..クラス2が一定であることを前提としていブール式を外部メソッドに配置し、それをIFステートメントに呼び出すことです。要するに
:いいえ
長い答え:あなたはすべての親クラスを取得し、その後、あなたのクラス名の一つ以上が表示された場合、調べるためにarray_intersect()
を使用するget_parent_class()
再帰を使用する回避策を作成することができます。しかし、彼らのクラスには何か共通点があるはずです。これに対してこれをインターフェースに入れてください。
が長すぎIF文を作る
[...]
確かに短い方法はあります。
単に機能作成:
function isOfValidClass($obj)
{
$classNames = array('Class1', 'Class2');
foreach ($classNames as $className) {
if (is_a($obj, $className)) {
return true;
}
return false;
}
は、その後、あなたがいないあなたがいることを考慮すべきであるということ(「あまりにも多くの部屋を取って」あなたのif文を心配する必要があなたのコードでそれを使用してすることはできませんが問題はステートメントが必要な限り長くなければならない)。
これらのクラスに共通するものはありますか?おそらく彼らはすべて同じインターフェースを実装しており、 '$ obj'がそのインターフェースを実装しているかどうかを確認できます。 –
ローカライズされていますか?私はこれを5年後に見つけました。それはまだ有用です。 –