PHP代码段无法正常工作

时间:2011-06-11 00:38:05

标签: php

我有这个变量:$logged_in_person_rsvp - 它的值= -1

然后我运行这段代码:

$yes_checked = ($logged_in_person_rsvp===1) ? "checked" : "";
$maybe_checked = ($logged_in_person_rsvp===-1) ? "checked" : "";
$no_checked = ($logged_in_person_rsvp===0) ? "checked" : "";

echo '<p>logged_in_person_rsvp: '.$maybe_checked.'</p>';

我得到的输出都没有。但我期待输出为-1

任何人都明白为什么?这是我继承的奇怪语法:)

6 个答案:

答案 0 :(得分:3)

您已回复$maybe_checked

$maybe_checked将被“检查”或“”,您认为它如何为-1?

echoing $logged_in_person_rsvp应输出-1

===================

回复你的评论:

然后尝试使用运算符==代替

===是两个变量之间的严格比较

答案 1 :(得分:3)

尝试使用两个等号“==”而不是3,看看是否有所作为。如果是这样,您的严格比较可能会弄乱您的预期结果。

答案 2 :(得分:1)

三元操作应括在括号中。

$maybe_checked = ($logged_in_person_rsvp===-1 ? "checked" : "");

这应该可以解决问题。

编辑:另外,确保你的$logged_in_person_rsvp是-1整数,而不是'-1'字符串。或者尝试使用==而不是===。

答案 3 :(得分:1)

这些变量中的每一个的值都将被“选中”或“”,具体取决于括号中操作的结果。

($logged_in_person_rsvp===-1) ? "checked" : "";

基本上,这样做是检查$ logged_in_person_rsvp === - 1是真还是假。如果为true,则变量将被赋值为“checked”,如果为false,则变量将被赋值为“”。

答案 4 :(得分:1)

三元句法通常会让新手感到困惑。这是使用数组映射表达代码的另一种方法:

$checked = array(FALSE => "", TRUE => "checked");

$yes_checked =   $checked[($logged_in_person_rsvp===1)];
$maybe_checked = $checked[($logged_in_person_rsvp===-1)];
$no_checked =    $checked[($logged_in_person_rsvp===0)];

echo '<p>logged_in_person_rsvp: '.$maybe_checked.'</p>';

===只是普通等级==运算符的严格版本。

答案 5 :(得分:0)

您是否尝试var_dump($logged_in_person_rsvp);(或检查xdebug或firephp中的值,或您选择的调试器)以确定$logged_in_person_rsvp的类型是什么?

使用您提供的代码段,如果我设置:

$logged_in_person_rsvp = -1;

一切正常,我得到<p>logged_in_person_rsvp: checked</p>但如果我设置:

$logged_in_person_rsvp = "-1";

然后我得到<p>logged_in_person_rsvp: </p>

正如其他人所指出的那样,==会尝试将比较的两边强制转换为同一类型,但===也会检查类型,如果一个是字符串则会失败一个是int / float。