web-dev-qa-db-fra.com

Basculer par classe (instanceof) dans PHP

Il est possible de remplacer le bloc de if( .. instanceof ...), elseif(... instanceof ...), ... par interrupteur?

Par exemple:

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

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

Ce qui suit est plus correct:

$class = get_class($objectToTest);

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

De cette façon, les espaces de noms sont correctement comparés (vous n'avez pas besoin de les taper) et si quelque chose change comme l'espace de noms ou le nom de classe, vous obtiendrez une erreur IDE IDE vous informant que votre code est cassé.

20
whitebrow

Certains aiment ça:

$class = get_class($objectToTest);

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

Ou ca:

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