switch - недокументированные возможности?
Недавно мне подсказали, что параметром case в switch-операторе
может идти функция или переменная.
Интересно, что в документации это не отражено - так же не отражена особенность
использования функции в качестве параметра к case.
На мой взгляд, эта возможность открывает довольно интересные возможности
и алгоритмы программирования.
Например, код:
Тоесть мы можем, к примеру, подбирать, когда результаты работы нескольких функций нас устроят. Конечно, функциям при этом можно передавать параметры.
Вопрос такой: я что-то путаю или в 4.1.0 такого действительно не было?
Что здесь, IMHO, недокументированного - так это поведение скрипта при указании в виде параметра для case функции.
Код
В данном случае функция foo() НЕ БУДЕТ выполнена при значении $a == 1 и БУДЕТ выполнена в остальных случаях.
Т.е. 3й вариант switch не будет выполнен никогда.
Надеюсь, кому-либо вышесказанное было интересно
Недавно мне подсказали, что параметром case в switch-операторе
может идти функция или переменная.
Интересно, что в документации это не отражено - так же не отражена особенность
использования функции в качестве параметра к case.
На мой взгляд, эта возможность открывает довольно интересные возможности
и алгоритмы программирования.
Например, код:
PHP:
$a = 1;
switch (foo()) {
case bar():
echo "1";
break;
case bar():
echo "2";
break;
case bar():
echo "3";
break;
default:
echo "none";
}
echo "\n";
function foo (){
return 3;
}
function bar (){
global $a;
return ++$a;
}
Вопрос такой: я что-то путаю или в 4.1.0 такого действительно не было?
Что здесь, IMHO, недокументированного - так это поведение скрипта при указании в виде параметра для case функции.
Код
PHP:
switch ($a) {
case 1:
echo "1";
break;
case foo():
echo "2";
break;
case $a:
echo "3";
break;
}
function foo (){
global $a;
++$a;
return 3;
}
Т.е. 3й вариант switch не будет выполнен никогда.
Надеюсь, кому-либо вышесказанное было интересно