3

我仍然是 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不支持字符串连接中的问号运算符吗?

4

6 回答 6

2

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

$output_string .= "<td>".(($row->isactive == "0") ? "Activated":"Deactivated")."</td>";
于 2012-09-27T04:59:52.377 回答
1

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

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

请注意额外的一组括号。

如果你只是放:

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

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

于 2012-09-27T05:00:06.017 回答
1

不是那样,而是在“:”运算符之后

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

应该被视为错误的单一陈述,如果你想像这样尝试

$output_string .= "<td>".(($row->isactive == "0") ? "Activated":"Deactivated")."</td>";
于 2012-09-27T05:01:04.773 回答
1

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

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

那会给你你想要的。

我对发生的事情的猜测是,"<td>"附加了布尔结果,($row->isactive == "0")你总是会得到"Activated</td>"你的结果。

于 2012-09-27T05:02:03.430 回答
1

PHP 中的连接具有比三元运算符更高的优先级。所以首先执行表达式"<td>".($row->isactive == "0"),然后执行它的结果表达式(它总是相等true,因为将非空字符串转换为布尔值解释为true)。因此,您的代码的结果始终是 word Activated

于 2012-09-27T05:10:53.093 回答
0

()当您像这样在连接之后和之前使用它时它会起作用

$output_string .= "<td>".(($row->isactive == "0") ? "Activated":"Deactivated")."</td>";
于 2012-09-27T05:00:38.373 回答