【问题标题】: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
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->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>";
这会给你你想要的。
我对发生的事情的猜测是,"<td>" 被附加到 ($row->isactive == "0") 的布尔结果之后,您将始终得到 "Activated</td>" 作为结果。
【解决方案5】:
PHP 中的连接优先级高于三元运算符。所以首先执行表达式"<td>".($row->isactive == "0"),然后执行表达式的结果(它总是等于true,因为将非空字符串转换为布尔值解释为true)。所以,你的代码的结果总是单词Activated。
【解决方案6】:
当您在这样的连接前后使用() 时,它会起作用
$output_string .= "<td>".(($row->isactive == "0") ? "Activated":"Deactivated")."</td>";