Null& PHP中的错误

时间:2014-03-15 05:48:25

标签: php null

我遇到了这个问题。我错过了什么?

function ninja($x, $y, $z) 
{

     if ($y != $z && $x == $y && $x == $z) {
        return "Yes";   
      }

    return "No";    
}

对于$ x,$ y,$ z的值,此函数会返回“是”吗?

4 个答案:

答案 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。