Я хотел бы условно выполнить две функции:
while($row = mysql_fetch_assoc($result))
(strtolower($message) == $row['question'])
? msg($row['answer']) && update($row['question'])
: '';
но этот код не работает.
Сокращения работают только для однострочных операторов. Так как ваш если Оператор содержит две строки, стенография не работает. Обычно в то время как Циклы отформатированы следующим образом:
while (/* condition */)
{
// code to be executed
}
Ваше троичное выражение также неверно; это должно быть написано следующим образом:
(/* condition */) ? /* if true do this */ : /* if false do this */
Во второй части троичного высказывания (?:
), вы используете условный оператор &&
, который сравнивает два логических выражения. Насколько я понимаю, ваше намерение использовать &&
это выполнить две строки, что неверно. Обратитесь к документации: PHP Docs (операторы сравнения)
Вам нужно написать в то время как петля с фигурными скобками, потому что ваш если Оператор содержит несколько строк кода следующим образом:
while($row = mysql_fetch_assoc($result))
{
if (strtolower($message) == $row['question'])
{
msg($row['answer']);
update($row['question']);
}
}
Есть ли причина, по которой вам нужно использовать сокращенный код для этого?
Следующее будет более читабельным, а также, когда вы (или кто-то еще) придете обновить / изменить / просмотреть / отладить код когда-нибудь в будущем, будет гораздо более очевидным, каковы были ожидаемые результаты.
while($row = mysql_fetch_assoc($result)) {
if (strtolower($message) == $row['question']) {
msg($row['answer']);
update($row['question']);
}
}
Обычно укороченная?: Версия зарезервирована только для самых простых условий и действий.
Определить функцию msg_update()
это обертывания msg()
а также update()
:
function msg_update($row) {
msg($row);
update($row);
}
Тогда вы можете сделать:
while($row = mysql_fetch_assoc($result)) (strtolower($message) == $row['question']) ? msg_update($row['answer']) : '';
Это потому, что тенарный оператор принимает только простые операции. Надеюсь, что это работает для вас.