Подтвердить что ты не робот

Переключение по классу (instanceof) в PHP

Можно заменить блок if( .. instanceof ...), elseif(... instanceof ...), ... на переключатель?

Например:

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

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

Ответ 1

Правильнее следующее:

$class = get_class($objectToTest);

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

Таким образом, пространства имен правильно сравниваются (вам не нужно их вводить), и если что-либо изменится, например, пространство имен или имя класса, вы получите достойную ошибку IDE, сообщающую вам, что ваш код поврежден.

Ответ 2

Некоторым нравится следующее:

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