Устранение неполадок «Неожиданный T_ECHO» в выражении троичного оператора - PullRequest
23 голосов
/ 23 апреля 2010
($DAO->get_num_rows() == 1) ? echo("is") : echo("are");

Эта доза, кажется, не работает для меня, как предполагалось, я получаю ошибку "Неожиданный T_ECHO". Я ожидаю, что он будет повторять «есть» или «есть».

Я пробовал это без скобок вокруг условного. Разве я не могу использовать троичный оператор таким образом?

$DAO->get_num_rows() возвращает целочисленное значение.

Ответы [ 4 ]

50 голосов
/ 23 апреля 2010

Тернарный оператор не идентичен if-then. Вы должны были написать это

echo ($DAO->get_num_rows() == 1) ? "is" : "are";

Это возвращает значение во 2-й или 3-й позиции. Он НЕ выполняет оператор во 2-й или 3-й позиции.

6 голосов
/ 23 апреля 2010

Тернарный оператор должен приводить к значению, а не отражать его.


Здесь вы, вероятно, хотите это:

echo ($DAO->get_num_rows() == 1) ? "is" : "are";


Если вы хотите использовать два echo, вам придется работать с блоком if / else:

if ($DAO->get_num_rows() == 1) {
    echo "is";
} else {
    echo "are"
}

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

2 голосов
/ 23 апреля 2010

Тернарный оператор возвращает одно из двух значений после оценки условий.Он не должен использоваться так, как вы его используете.

Это должно работать:

echo ($DAO->get_num_rows() == 1 ? "is" : "are");
0 голосов
/ 23 апреля 2010

U можно использовать

echo ($ DAO-> get_num_rows () == 1)? "is": "are";

...