Переключение по классу (instanceof) в PHP
Можно заменить блок if( .. instanceof ...), elseif(... instanceof ...), ...
на переключатель?
Например:
<?php
$class = ..... //some class
if($class instanceof SomeClass) {
//do something
} elseif($class instanceof SomeAnotherClass) {
//do something else
}
Ответы
Ответ 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;
}