web-dev-qa-db-ja.com

PHPのクラス(instanceof)で切り替える

if( .. instanceof ...), elseif(... instanceof ...), ...のブロックをスイッチで置き換えることは可能ですか?

例えば:

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

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

以下の方が正しいです:

$class = get_class($objectToTest);

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

このように、名前空間は適切に比較され(入力する必要はありません)、名前空間やクラス名などの変更があると、適切なIDEエラーがコードに通知されますは壊れてます。

20
whitebrow

このようなもの:

$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;
}
58
Ivan