PHP: несколько операторов в троичном выражении - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть функция, которая выглядит примерно так:

function fun()
{
   $pMana < 20 ? error(1) : $pMana -= 20;
   //do stuff
}

Я хочу, чтобы при вызове функции ошибки она также выходила из функции, что-то вроде этого

function fun()
{
   $pMana < 20 ? (error(1); return) : $pMana -= 20; //invalid syntax
   //do stuff
}

Мне еще предстоит увидеть троичное выражение, способное обработать более одного такого утверждения, но я новичок в этом. Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

Используйте оператор if в этой ситуации.

Тернарный оператор должен возвращать одно значение, следовательно, ограничение одного оператора.Вы также не должны использовать функции с какими-либо значительными побочными эффектами в троичном операторе.

То, что вы предлагаете, неизбежно приводит к очень нечитаемому коду, вы должны сосредоточиться на удобочитаемости, а не на количестве строк / символов.Большая часть кода читается намного чаще, чем записывается / редактируется.

РЕДАКТИРОВАТЬ:

Вы также можете использовать assert для аналогичных целей.

assert($pMana > 20);
$pMana -= 20

Однако утверждения никогда не должны использоваться для обработки общих ситуаций (таких как проверка пользовательского ввода).Практическое правило заключается в том, что ошибочное утверждение должно ВСЕГДА указывать на ошибку в вашем коде.Выражения утверждений должны охватывать предположения о вводе из других частей состояния программы / программы под названием «Поймай ошибки как можно скорее» (в этом случае оно будет использоваться для предотвращения ошибок, приводящих к тому, что мана станет отрицательной, что может привести к исцелению).позже).

0 голосов
/ 21 сентября 2011

Тернарный оператор обычно используется для присвоения значения переменной.Логическое утверждение следует использовать с «если».

...