檢查對象是否屬於某個特定類別的一部分,是否有一種較短的方法?多重instanceof檢查
使用的instanceof使得IF語句太長: if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)
而且這不起作用: instance of \Class1 || \Class2 || \Class3
它假定的Class2是恆定..
檢查對象是否屬於某個特定類別的一部分,是否有一種較短的方法?多重instanceof檢查
使用的instanceof使得IF語句太長: if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)
而且這不起作用: instance of \Class1 || \Class2 || \Class3
它假定的Class2是恆定..
我認爲,最近的路將布爾表達式放在外部方法中並將其調用到IF語句中。
總之:沒有
較長的答案:您可以創建的解決方法,即使用get_parent_class()
遞歸來獲取所有的父類,然後使用array_intersect()
找出來,如果一個或多個類的名字出現在那裏。但是,看起來,他們的班級應該有一些共同點。把它放到一個接口中來測試這個。
使得IF語句太長
[...]
有一個較短的方式
肯定。
簡單創建一個功能:
function isOfValidClass($obj)
{
$classNames = array('Class1', 'Class2');
foreach ($classNames as $className) {
if (is_a($obj, $className)) {
return true;
}
return false;
}
然後你可以使用在你的代碼,而不必擔心你的if語句「佔用太多的空間」(不是說你應該永遠考慮一個問題;報表應該儘可能長)。
這些類有什麼共同點嗎?也許他們都在實現相同的接口,你可以檢查'$ obj'是否實現了這個接口? –
太局部化了嗎?我發現這5年後,它仍然有用。 –