Уфа

ул. Лесной проезд 6/5,

Офис 6.

+7 (906) 102-95-68

ул. Лесной проезд 6/5, Офис 6.

tel
Главная Стрелка вправо Блог Стрелка вправо Использование switch вместе с instanceof в php

Использование switch вместе с instanceof в php

Бывают ситуации, когда необходимо проверить какой класс имеет объект. Самым простым способом является использование instanceof и обычный if. Оператор instanceof   используется для определения того, является ли текущий объект экземпляром указанного класса. Он не генерирует никаких ошибок, если проверяемая переменная не является объектом. В этом случае он просто возвращает false.

if($element instanceOf AClass) {  
    echo "AClass";
} elseif($element instanceOf BClass) {
    echo "BClass";
} elseif($element instanceOf CClass) {
    echo "CClass";
} elseif($element instanceOf DClass) {
    echo "DClass";
}

Но, когда на такое смотришь, лично у меня чешутся пальцы и хочется привести это в более приятный вид. Тогда на ум приходит использование switch case. Например:

$class = get_class($element);
switch($class) {  
    case 'AClass':
        echo "AClass";
        break;
    case 'BClass':
        echo "BClass";
        break;
    case 'CClass':
        echo "CClass";
        break;
    case 'DClass':
        echo "DClass";
        break;
    default:
    	echo "не обязательное значение по умолчанию";
}

В данном примере, минусом является прописывание класса руками, что приводит к бессмысленной трате времени и большой вероятности появления ошибки в написании.
Но мы может использовать следующее:

switch(true) {  
    case $element instanceof AClass:
        echo "AClass";
        break;
    case $element instanceof BClass:
        echo "BClass";
        break;
    case $element instanceof CClass:
     	echo "CClass";
        break;
    case $element instanceof DClass:
     	echo "DClass";
        break;
    default:
    	echo "не обязательное значение по умолчанию";
}

Если сравнивать время выполнения, то получается примерно одинаковое, что у if, что у switch. Кроме того лучше думать не о времени выполнения, о большей эффективности подхода. Так же swicth намного полезнее если в case идет сравнение с постоянной переменной.