php大于比较,类型交叉和(严格)大于/小于PHP中的比较
发布日期:2021-08-19 23:05:04 浏览次数:11 分类:技术文章

本文共 1315 字,大约阅读时间需要 4 分钟。

PHP的比较运算符在几个方面偏离了计算机科学定义:

为了构成一个等价关系==必须是反身,对称和传递的:

> PHP的==运算符不是反射的,即$ a == $ a不总是真的:

var_dump(NAN == NAN); // bool(false)

注意:任何涉及NAN的比较总是false的事实并不是PHP特有的。它由IEEE 754浮点算术标准(more info)规定。

> PHP的==运算符是对称的,即$ a == $ b和$ b == $ a总是相同的。

> PHP的==运算符不是传递的,即从$ a == $ b和$ b == $ c不跟随$ a == $ c:

var_dump(true == "a"); // bool(true)

var_dump("a" == 0); // bool(true)

var_dump(true == 0); // bool(false)

为了构成部分阶数,必须是反射性的,反对称和传递性的:

> PHP的< =运算符不是反射的,即$ a< = $ a并不总是真的(例子与==相同)。

> PHP的< =运算符不是反对称的,即从$ a< = $ b且$ b< = $ a不跟随$ a == $ b:

var_dump(NAN <= "foo"); // bool(true)

var_dump("foo" <= NAN); // bool(true)

var_dump(NAN == "foo"); // bool(false)

> PHP的< =运算符不是传递的,即从$ a <= b $和$ b <= $ c不跟随$ a <= $ c(示例与==相同)。

> Extra:PHP的< =运算符不是总的,即$ a< = $ b和$ b< = $ a都可以是false:

var_dump(new stdClass <= new DateTime); // bool(false)

var_dump(new DateTime <= new stdClass); // bool(false)

为了构成严格的部分顺序,必须是非自反性,不对称和传递性的:

> PHP的

> PHP的

> PHP的

var_dump(-INF < 0); // bool(true)

var_dump(0 < TRUE); // bool(true)

var_dump(-INF < TRUE); // bool(false)

>额外:PHP的

>额外:PHP的

var_dump(INF < []); // bool(true)

var_dump([] < new stdClass); // bool(true)

var_dump(new stdClass < INF); // bool(true)

注意:上面的例子抛出“stdClass类的对象无法转换为double”的通知。

作为最后一点,我想指出,有两个平等PHP,PHP保证(不像几乎一切)。这两个总是保持,只是因为编译器把一个减少到另一个:

($a > $b) == ($b < $a)

($a >= $b) == ($b <= $a)

转载地址:https://blog.csdn.net/weixin_31068553/article/details/115738375 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php常用加密解密,php实现的三个常用加密解密功能函数示例
下一篇:php 循环重定向,php 避免登录出现循环重定向

发表评论

最新留言

很好
[***.229.124.182]2024年12月21日 08时46分47秒