2012-05-29 15 views
6

Bir nesnenin belirli bir sınıf kümesinin parçası olup olmadığını kontrol etmenin daha kısa bir yolu var mı? if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)Çoklu giriş denetimi

Ve bu işe yaramazsa:

çok uzun instanceof IF deyimi yapar kullanma instance of \Class1 || \Class2 || \Class3

o Sınıf2 sabit olduğunu varsayar ..

+2

Bu sınıfların ortak bir özelliği var mı? Belki hepsi aynı arayüzü uygularlar, ve '$ obj''in bunun yerine bu arayüzü uygulayıp uygulamadığını kontrol edebilirsiniz. –

+0

Çok yerel mi? Bunu 5 yıl sonra buldum ve hala işe yarar. –

cevap

1

sanırım, kısa yoldan Boolean ifadesini harici bir yöntemle koymak ve bunu IF deyimine çağırmaktır. Kısacası

7

: Hayır

Uzun yanıt: Sen, sınıf isimlerinden biri ya da daha görülmesi durumunda, öğrenmek için array_intersect() kullanmak sonra tüm üst sınıflarını alıp bu kullanım get_parent_class() özyinelemeli geçici çözümler yaratabilirsiniz. Ancak, öyle görünüyor ki, sınıfların ortak bir yönü olmalı. Bunu bir ara yüze, buna karşı bir test yapın.

5

çok uzun IF deyimi yapar

[...]

Tabii daha kısa bir yolu var mı.

Basitçe bir işlev oluşturun:

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

    return false; 
} 

Sonra değil Bunu hiç düşünmelisiniz ki ("çok fazla yer kaplıyor" senin eğer deyimi endişelenmenize gerek kodunuzda kullanan ve olamaz bir sorun; ifadeler gerek duydukları sürece olmalıdır).

İlgili konular