在 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 错误通知你的代码被破坏了。
可以用 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 错误通知你的代码被破坏了。