switch - недокументированные возможности?

grigori

( ͡° ͜ʖ ͡°)
Команда форума
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;
}
В данном случае функция foo() НЕ БУДЕТ выполнена при значении $a == 1 и БУДЕТ выполнена в остальных случаях.
Т.е. 3й вариант switch не будет выполнен никогда.

Надеюсь, кому-либо вышесказанное было интересно :)
 

Frol

Новичок
1. в комментариях в мануале есть примеры
2. это абсолютно нормально
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Значит, надо обновлять мануал.
Спасибо.
 
Сверху