Опуская вторую часть троичного оператора - PullRequest
9 голосов
/ 12 ноября 2011

Учитывая следующее выражение:

$att['menutext'] = isset($attrib_in['i_menu_text']) ? : $this->getID();

Если значение равно true, $att['menutext'] будет установлено в true или $this->getID()?

Ответы [ 5 ]

14 голосов
/ 12 ноября 2011

Согласно эта ссылка :

Начиная с PHP 5.3, можно опустить среднюю часть троичного оператора.Выражение expr1?: Expr3 возвращает expr1 , если expr1 оценивается как TRUE, а expr3 в противном случае.

2 голосов
/ 12 ноября 2011

Да, в версии 5.3+ среднее выражение является необязательным и возвращает true.

$a = (true ? : 1); // $a evaluates to true.
$a = (false ? : 1); // $a evaluates to 1.
2 голосов
/ 12 ноября 2011

Это так же, как следующие

$att['menutext'] = isset($attrib_in['i_menu_text']) ? true : $this->getID();

1 голос
/ 12 ноября 2011

никогда не тестировался ранее, но его довольно легко проверить:

<?php var_dump(TRUE ? : 'F'); ?>

и он говорит: bool (true)

0 голосов
/ 12 ноября 2011

Это не будет выполнено, это неверный синтаксис для PHP <5.3 </strong>.

Parse error: syntax error, unexpected ':' on line X

Если вы хотите, чтобы значение было установлено в true, используйте true:

$att['menutext'] = isset($attrib_in['i_menu_text']) ? true : $this->getID();

Или это может быть более вероятным, чем вы хотите:

$att['menutext'] = isset($attrib_in['i_menu_text']) ? $attrib_in['i_menu_text'] : $this->getID();
...