как, если оператор не понимает php? - PullRequest
0 голосов
/ 09 марта 2012

У меня есть if оператор, и я могу написать его двумя способами:

1.  echo $danceInfo->getSearchingGigDes() ? $danceInfo : 'n/a';

or

2.  if ($danceInfo){ echo $danceInfo->getSearching(); }else{ echo 'n/a'; }

первый, похоже, не работает, и я не понимаю, почему ?? !!

я тоже пробовал:

1.  echo $danceInfo->getSearchingGigDes() ? isset($danceInfo) : 'n/a';

но это не сработает.

есть идеи?

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

спасибо

Ответы [ 3 ]

2 голосов
/ 09 марта 2012

Может быть, вы хотите

 echo (($danceInfo) ? $danceInfo->getSearching() : 'n/a');
1 голос
/ 09 марта 2012

Прежде всего, как работают два разных условия? Конструкция

X1 ? Y1 : Z1;

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

if (X2 {
   Y2;
}
else {
   Z2;
}

является оператором и является полной «строкой кода», которая что-то делает (например, влияет на состояние) и которая не может быть встроена в большее выражение.

В обоих случаях X1 и X2 являются условиями - подвыражениями, которые должны быть оценены до логических значений, чтобы решить, какую ветвь выбрать. PHP, в соответствии с другими основными языками, допускает определенное количество неявных преобразований типов, так что если X1 и X2 вычисляют не логические значения TRUE или FALSE, а вместо этого какой-либо другой встроенный тип (например, строки или числа) затем их значение преобразуется в логическое значение с использованием четко определенных правил. Например, числовой ноль преобразуется в FALSE, а любое ненулевое значение в TRUE. Для строк пустая строка (или ноль) считается как ЛОЖЬ, а все остальное - ИСТИНА.

В приведенном выше коде подвыражения условий в двух условных выражениях совершенно разные, поэтому не следует ожидать, что они приведут к одинаковым результатам. В первом случае условие является результатом вывода строки в вывод, поэтому логическое значение, которое решает, какую ветвь принять, будет преобразовано из возвращаемого значения echo. echo (http://php.net/manual/en/function.echo.php) имеет возвращаемый тип void, поэтому я думаю, что он всегда должен иметь значение false. Во втором условном выражении вы используете значение $ displayInfo - если это ненулевая, ненулевая или непустая строка, это будет оцените TRUE, и вы увидите результат выражения echo, в противном случае вы увидите 'n / a' на выходе.

1 голос
/ 09 марта 2012

Первый должен быть

echo $danceInfo ? $danceInfo->getSearchingGigDes() : 'n/a';
...