在 PHP 中按 class (instanceof) 切换

Switch by class (instanceof) in PHP

可以用 switch 替换 if( .. instanceof ...), elseif(... instanceof ...), ... 的块吗?

例如:

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

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

对于考虑继承的 instanceof 的多态开关:

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

对于 class 名称应完全匹配的交换机:

$class = get_class($objectToTest);

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

以下比较正确的是:

$class = get_class($objectToTest);

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

这样可以正确比较命名空间(您不必输入它们),如果有任何更改,例如命名空间或 class 名称,您将得到一个不错的 IDE 错误通知你的代码被破坏了。