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

  • Автор темы Автор темы grigori
  • Дата начала Дата начала

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 не будет выполнен никогда.

Надеюсь, кому-либо вышесказанное было интересно :-)
 
1. в комментариях в мануале есть примеры
2. это абсолютно нормально
 
Сверху