背后的PHP类型比较背后的哲学
所以在php网站上有这个页面显示比较不同值的结果:
http://php.net/manual/en/types.comparisons.php
这是一个有用的参考,但我宁愿不必每次访问此页面以确保我正在进行类型比较。 所以我的问题是
在PHP的类型比较逻辑背后是否存在某种潜在的哲学/推理?
例如,我可以看到,对于松散的比较:
但从试图建立模式开始就变得有点多毛。
对于直接转换为布尔值,这是它的工作原理。
然后这些规则用于比较相同类型的变量:
对于不同类型的变量,上面列表中较高的类型将转换为比较低的类型。
===和!==运算符在比较之前不会进行转换,但您应该注意,如果对象是相同的实例,则对象只有=== 。
奇怪的是数组,它们是===如果它们具有相同的顺序定义的键和值。
$a = array("a"=>1, "b"=>2);
$b = array("b"=>2, "a"=>1);
$a == $b; // true
$a === $b; // false
而empty()等价于!(bool)$var
例外
Array __toString方法的对象转换为字符串会导致一个致命错误。 ArrayAccess接口也是如此) 对于严格的===比较,逻辑很简单:每个价值实体仅等于自身,所以TRUE === TRUE , "1" === "1" ,但是"1" !== 1等等
当谈到==比较时, 不幸的是没有经验法则,也没有明确的逻辑 。 这可能是因为运营商的各种形式由不同的程序员实施,没有中央设计决策。 我能做的最好的就是提供这张图表来打印并粘贴在显示器上:

Grap的关键是:当且仅当A和B两种类型直接通过上图中的一条线连接时, A == B才会为TRUE 。 例如, array() == NULL是TRUE因为array()和NULL是直接连接的,而array() == 0是FALSE因为没有连线。
以红色标出的线条是棘手的(非明显的)平等 。
我忽略了每个实体都等于自身(例如"1" == "1"等),但这应该很容易记住。
最后,我想解释为什么"php" == 0是TRUE (非空,非数字字符串等于0 ):因为PHP在比较之前将"php"转换为数字,并且由于它不是数字它默认为0 ,并使测试为TRUE 。
有趣的事实:在这种关系中没有分区! 如果允许传递闭包,你可以很容易地说真是假和假是真的,用四个简单的PHP语句破坏千年哲学:D
如果价值包含某些东西,那么它可以说是true 。 例如, 1 , 1.123 , array("value")等,均应视为true 。
如果该值可以说是空的或无效的(即缺少某些东西),那么它被视为false 。 例如, 0 , 0.0 , array()等等。
这种关于变量的思考方式对PHP并不特别。 许多其他语言以相同或相似的方式进行操作。 例如Perl,C和Javascript,仅举几例。
链接地址: http://www.djcxy.com/p/58513.html