Оператор переключения PHP внутри другого оператора переключения
У меня есть ситуация, когда я должен проверить две переменные GET. После проверки первого в одном операторе switch внутри оператора, вторая переменная должна быть проверена во втором операторе switch внутри первого цикла case.
Я не могу опубликовать точный код здесь, но вот пример:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
switch($_GET['parent']){
case 'child1':
if(!isset($_GET['child'])){
echo "Only parent";
}
else{
switch($_GET['child']){
case 'test':
echo 'test';
break;
}
}
break;
case 'child2':
echo 'child2';
break;
default:
echo $_GET['parent'];
}
?>
Это прекрасно работает с этим примером кода, но когда я на самом деле использую эту процедуру на моем сервере, элемент управления пропускается к значению по умолчанию в операторе родительского переключателя, даже если он имеет соответствующее значение регистра.
Об ошибках не сообщается, и я не смог отладить больше, чем до этого уровня.
Я знаю, что вы хотите увидеть код, но я не могу опубликовать его здесь. По крайней мере, вы можете вести меня больше отладки.
Ответы
Ответ 1
В соответствии с примерами документации PHP, возможно, если блок case, содержащий вложенный ключ, заключен в фигурные скобки.
Выполняется упомянутый пример.
<?php
switch ($argc) {
case 'home': {
print('This is $argc, home case.');
break;
}
case 'subsection': {
switch ($argd) {
case 'links': {
switch($arge) {
case 'display': {
print('This is $arge, subsection,links,display case.');
break;
}
}
}
}
}
}
?>
Ответ 2
Я не вижу ошибок в коде. Я попробовал это на своей машине, и все работает отлично. Поскольку он также отлично подходит для вас, ошибка чаще всего находится где-то в другом месте.
Нет причин, по которым вложенные операторы switch не могут быть возможны, поскольку операторы switch определяются следующим образом:
switch($variable) {
case "case1":
[statement]
break;
}
[statement]
можно заменить простой командой, например echo "test";
, серией команд echo "test"; echo "test";
или другим оператором switch. Добавление фигурных скобок ничего не меняет, поскольку они просто служат для группировки серии команд, поэтому для части then
можно использовать более одной команды в условных выражениях, таких как if([condition]) [then]
. Вышеприведенный ответ, который на удивление имеет 18 зазоров за неправильное консультирование по добавлению фигурных скобок, ничего не меняет.
В заключение можно утверждать, что вложенные операторы switch и способ их использования в вашем примере кода верны. Ошибка в другом месте.