2012-05-29 28 views
6

檢查對象是否屬於某個特定類別的一部分,是否有一種較短的方法?多重instanceof檢查

使用的instanceof使得IF語句太長: if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)

而且這不起作用: instance of \Class1 || \Class2 || \Class3

它假定的Class2是恆定..

+2

這些類有什麼共同點嗎?也許他們都在實現相同的接口,你可以檢查'$ obj'是否實現了這個接口? –

+0

太局部化了嗎?我發現這5年後,它仍然有用。 –

回答

1

我認爲,最近的路將布爾表達式放在外部方法中並將其調用到IF語句中。

7

總之:沒有

較長的答案:您可以創建的解決方法,即使用get_parent_class()遞歸來獲取所有的父類,然後使用array_intersect()找出來,如果一個或多個類的名字出現在那裏。但是,看起來,他們的班級應該有一些共同點。把它放到一個接口中來測試這個。

5

使得IF語句太長

[...]

有一個較短的方式

肯定。

簡單創建一個功能

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

    return false; 
} 

然後你可以使用在你的代碼,而不必擔心你的if語句「佔用太多的空間」(不是說你應該永遠考慮一個問題;報表應該儘可能長)。