Прежде всего, как работают два разных условия? Конструкция
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' на выходе.