我有这个变量:$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
任何人都明白为什么?这是我继承的奇怪语法:)
答案 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。