我遇到了这个问题。我错过了什么?
function ninja($x, $y, $z)
{
if ($y != $z && $x == $y && $x == $z) {
return "Yes";
}
return "No";
}
对于$ x,$ y,$ z的值,此函数会返回“是”吗?
答案 0 :(得分:3)
由于==
和!=
允许类型杂耍,因此各种值组合将允许函数返回Yes
。一个版本是
function ninja($x, $y, $z) {
if ($y != $z && $x == $y && $x == $z) {
return "Yes";
}
return "No";
}
echo ninja(0, 'a', 'b');
由于非数字字符串 - 当与其进行比较并且类型变为整数时 - 具有值0,因此奇怪的结果是;
* $x == $y (0 == 'a')
* $x == $z (0 == 'b')
* $y != $z ('a' != 'b') (both are strings, so no type juggling)
comparison operators的文档将提供更多类型的杂耍想法,简短的版本是可能有更多的组合,但它们并不总是显而易见的。阅读它提供了学习使用===
和!==
的良好动机,但是:)
答案 1 :(得分:0)
根据你的逻辑: -
if ($y != $z && $x == $y && $x == $z)
所以这里
1. $y != $z
2. $x == $y
3. $x == $z
如果我考虑第2点和第3点那么
i. $x == $y
ii. $x == $z this means $y == $z
但你有条件 $ y!= $ z
因此,您的上述 if()条件永远不会成立。它总是返回假。
答案 2 :(得分:0)
这将返回true。
ninja(0, false, 'a');
PHP的一个怪癖。
答案 3 :(得分:0)
如果你采取
$x=0;
$y='z'; #only alphabet character
$z='x'; #only alphabet character
因为PHP是[松散类型]语言,所以总是可以通过向字符串添加零来将字符串转换为数字。因此,您必须将$x
值始终为0。