путаница троичного оператора php - PullRequest
0 голосов
/ 18 февраля 2012

Это заставляет меня сойти с ума, поэтому, пожалуйста, помогите:

$param[] = ($k == 'page') ? (($i > 1) ? "{$k}-{$i}" : null) : "{$k}-{$v}";

что я хочу это:

if ($k == 'page')
    if ($i > 1)
        $param[] = "{$k}-{$i}";
    else
        $param[] = null;
else
    $param[] = "{$k}-{$v}";

Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 февраля 2012

Прежде всего цитата из руководства по php на троичный оператор :

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

Вот что, если утверждение предназначено для ... Когда вам потребуется прочитать код позже, у вас будут проблемы ... Но если вы настаиваете:

$param[] = (($k == 'page') ? (($i > 1) ? "{$k}-{$i}" : null) : "{$k}-{$v}")

Всегда используйте скобки в этих случаях.

0 голосов
/ 18 февраля 2012

Из любопытства, это яснее:

$param[] = ($k == 'page') ? ( ($i > 1) : 'page-'.$i : null ) : $k.'-'.$v;

Вы действительно хотите вставить ноль, хотя?

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

Я думаю Вы хотите это:

($k == 'page' && $i > 1) ? $params[] = 'page-'.$i : $params[] = $k.'-'.$v;

или

$params[] = ('page' == $k && 1 < $i) ? 'page-'.$i : $k.'-'.$v;

Но!Не делайте этого.

Вместо этого просто сделайте это просто и сделайте:

if('page' == $k && 1 < $i) {
 // some comment
 $params[] = 'page-'.$i;
} else {
 // some comment
 $params[] = $k.'-'.$v;
}
...