在PHP

2016-05-04 33 views
13

中按類(instanceof)切換可以用開關替換if(.. instanceof ...), elseif(... instanceof ...), ...塊嗎?在PHP

例如:

<?php 
$class = ..... //some class 

if($class instanceof SomeClass) { 
    //do something 
} elseif($class instanceof SomeAnotherClass) { 
    //do something else 
} 

回答

4

下面是更正確的:

$class = get_class($objectToTest); 

switch($class) { 
    case TreeRequest::class: 
     echo "tree request"; 
     break; 
    case GroundRequest::class: 
     echo "ground request"; 
     break; 
} 

通過這種方式正確比較命名空間(您不必輸入它們),並且如果命名空間或類名稱等任何更改都會發生體面的IDE錯誤,從而通知您代碼已損壞。

+0

請記住,這樣你錯過了子類(類的繼承和實現) –

38

一些這樣的:

$class = get_class($objectToTest); 

switch($class) { 
    case 'TreeRequest': 
     echo "tree request"; 
     break; 
    case 'GroundRequest': 
     echo "ground request"; 
     break; 
} 

或者這樣:

switch(true) { 
    case $objectToTest instanceof TreeRequest: 
     echo "tree request"; 
     break; 
    case $objectToTest instanceof GroundRequest: 
     echo "ground request"; 
     break; 
} 
+3

第二個是一個不錯的竅門。 –

+0

switch(true),:+1: –

+10

對使用​​第一個例子的任何人的警告:它與'instanceof'不同,因爲它忽略了類的繼承和實現。 – SEoF