与针对javascript的此问题here类似,它为各种不同语言产生了大量spin-offs。我很好奇以下是否可以在PHP中评估为真:
($a == 1 && $a == 2 && $a == 3)
为了进一步跟进,似乎simply setting $a = true
将产生所需的结果(这不是javascript的情况,因为类型转换在两种语言中的工作方式)。一些答案(在javascript中)也适用于===
,因此在PHP中使用类型检查(===
),以下内容是否会产生真实效果?
($a === 1 && $a === 2 && $a === 3)
答案 0 :(得分:8)
我刚试过这个:
$a = true;
echo ($a == 1 && $a == 2 && $a == 3);
它回应了1
。
由于类型转换而不是类型检查,与布尔值比较时,1,2,3将被视为true
。
回答编辑:不能无法完成。
@FrankerZ评论的Hackish method :
零字节字符= 0xFEFF
http://shapecatcher.com/unicode/info/65279
http://www.unicodemap.org/details/0xFEFF/index.html
$var = "1";
$var = "2";
$ var = "3";
echo ($var === "1" && $var === "2" && $ var === "3") ? "true" : "false";
此代码使用此字符运行,因为名称$ var
和$var
似乎对PHP编译器有效,并且使用适当的字体,它可以隐藏。它可以用 Alt + 6 5 2 7 9来实现在Windows上。
答案 1 :(得分:3)
虽然没有严格遵守这个问题,但如果整数用引号括起来,可以这样做:
tuple
答案 2 :(得分:2)
我无法想象严格比较会产生真实的情况。 ===运算符首先比较类型,因此无法使用任何魔法方法。
对于好奇心,我最接近的是稍微修改设置并在tick函数中破解变量。由于每个语句只增加了滴答,我们必须将比较分解为多个语句才能生效。
$a = 1;
register_tick_function(function () use (&$a) {
++$a;
});
declare(ticks = 1) {
$a === 1 or exit(1);
$a === 2 or exit(1);
$a === 3 or exit(1);
}
echo "a = $a\n";