php if else多行速记

时间:2016-08-19 13:51:26

标签: php if-statement conditional-operator shorthand

我想有条件地执行两个函数:

while($row = mysql_fetch_assoc($result))
    (strtolower($message) == $row['question'])
        ? msg($row['answer']) && update($row['question'])
        : '';

但此代码无效。

3 个答案:

答案 0 :(得分:1)

速记仅适用于单行语句。由于 if 语句包含两行,因此速记不起作用。通常循环的格式如下:

while (/* condition */)
{
    // code to be executed
}

你的三元表达也是不正确的;它应写成如下:

(/* condition */) ? /* if true do this */ : /* if false do this */

在三元语句的第二部分(?:)中,使用条件运算符&&,它比较两个布尔表达式。据我了解,您使用&&的意图是执行两行,这是不正确的。请参阅文档:PHP Docs (Comparison operators)

您需要使用大括号编写 while 循环,因为 if 语句包含多行代码,如下所示:

while($row = mysql_fetch_assoc($result))
{ 
    if (strtolower($message) == $row['question'])
    {
        msg($row['answer']);
        update($row['question']);
    }
}

答案 1 :(得分:0)

有什么理由需要使用速记代码来执行此操作吗?

以下内容会更具可读性,而且当您(或其他人)在将来的某个时间更新/更改/审核/调试代码时,预期结果会更加明显。

while($row = mysql_fetch_assoc($result)) {
    if (strtolower($message) == $row['question']) {
        msg($row['answer']);
        update($row['question']);
    }
}

通常,缩短的?:版本仅保留用于最简单的条件和操作。

答案 2 :(得分:0)

定义包裹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']) : '';

这是因为tenary运营商只需要简单的操作。希望对你有用。