2012-09-27 23 views
3

我仍然是一个PHP新手,我使用codeigniter为我的后端框架。 我有一个table.php文件,它将实时生成一个html表格。然后,我遇到一些问题。PHP的问号运算符和字符串连接

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

与上面的代码我得到什么,但有一点变化:

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

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

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

+2

除了下面列出的答案之外,还应该注意到'PHP'中的'''操作符的作用与其他语言中的同一个操作符有所不同。**问题是PHP不像所有其他语言,使条件操作符保持关联。这会破坏你的代码 - 这在其他语言中会很好。 - >从http:// stackoverflow。com/questions/6203026/how-to-concatenate-multiple-ternary-operator-in-php –

回答

2

它不支持它,只是把一些括号周围:

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

感谢您的快速回复,但从未想过:D –

1

你不能让足够多的括号。试试这个:

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

请注意额外的一组括号。

如果你只是把:

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

PHP解释器将尝试和显示$row->isactive == "0",所以为它做你想要什么,你必须在一个额外的括号括起来。

0

,当你以后像这样

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

不是那样的连接前使用()它会工作,但之后“:”运营商的

​​

应该被视为单个语句假,如果你想得到这个尝试就像

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

你应该wr ap整个三元操作在()括号内

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

这会给你你想要的。

我对发生的事情的猜测是,"<td>"被加上($row->isactive == "0")的布尔结果,并且总是得到"Activated</td>"作为结果。

1

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