【问题标题】:PHP question mark operator and string concatenationPHP问号运算符和字符串连接
【发布时间】:2012-09-27 04:56:58
【问题描述】:

我还是 php 的新手,我正在为我的后端框架使用 codeigniter。 我有一个table.php 文件,它将实时生成一个 html 表。然后,我遇到了一些问题。

$output_string .= "<td>".($row->isactive == "0") ? "Activated":"Deactivated"."</td>";

使用上面的代码我什么也得不到,但稍作改动:

$isactive = ($row->isactive == "0") ? "Activated":"Deactivated";
$output_string .= "<td>".$isactive."</td>";

我得到了我的结果,所以我的问题是,为什么?

PHP 不支持字符串连接中的问号运算符吗??

【问题讨论】:

  • 除了下面列出的答案之外,应该注意PHP 中的? 运算符的作用与所有其他语言中的相同运算符略有不同。问题在于,与所有其他语言不同,PHP 使条件运算符具有左关联性。这会破坏你的代码——这在其他语言中会很好。 -> 来自stackoverflow.com/questions/6203026/…

标签: php string codeigniter


【解决方案1】:

它确实支持它,只是在它周围加上一些括号:

$output_string .= "<td>".(($row->isactive == "0") ? "Activated":"Deactivated")."</td>";

【讨论】:

    【解决方案2】:

    你没有放足够的括号。试试这个:

    $output_string .= "<td>".(($row->isactive == "0") ? "Activated":"Deactivated")."</td>";
    

    注意多余的括号。

    如果你只是输入:

    $output_string .= "<td>".($row->isactive == "0") ? "Activated":"Deactivated"."</td>";
    

    PHP 解释器会尝试显示$row-&gt;isactive == "0",所以要让它做你想做的事,你必须将它括在一组额外的括号中。

    【讨论】:

      【解决方案3】:

      不是这样,而是在“:”运算符之后你的

      :"Deactivated"."</td>";
      

      如果你想像这样尝试,应该将其视为 false 的单个语句

      $output_string .= "<td>".(($row->isactive == "0") ? "Activated":"Deactivated")."</td>";
      

      【讨论】:

        【解决方案4】:

        您应该将整个三元运算包含在() 括号中

        $output_string .= "<td>".($row->isactive == "0" ? "Activated":"Deactivated")."</td>";
        

        这会给你你想要的。

        我对发生的事情的猜测是,"&lt;td&gt;" 被附加到 ($row-&gt;isactive == "0") 的布尔结果之后,您将始终得到 "Activated&lt;/td&gt;" 作为结果。

        【讨论】:

          【解决方案5】:

          PHP 中的连接优先级高于三元运算符。所以首先执行表达式"&lt;td&gt;".($row-&gt;isactive == "0"),然后执行表达式的结果(它总是等于true,因为将非空字符串转换为布尔值解释为true)。所以,你的代码的结果总是单词Activated

          【讨论】:

            【解决方案6】:

            当您在这样的连接前后使用() 时,它会起作用

            $output_string .= "<td>".(($row->isactive == "0") ? "Activated":"Deactivated")."</td>";
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-08-13
              • 2015-01-11
              • 1970-01-01
              • 2014-02-27
              • 1970-01-01
              • 2016-07-19
              • 2015-08-28
              • 2010-09-08
              相关资源
              最近更新 更多