微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP日期时间比较

我已经习惯于在PHP(===)中使用相同的比较运算符,而不是使用相等的比较运算符(==).我在使用PHP的内置DateTime对象时遇到了一个问题.我很困惑为什么相等的比较返回true,但相同的比较在下面的代码中返回false?

码:

$test1 = new DateTime("Now");       // What I thought were identical objects
$test2 = new DateTime("Now");       // 
$test3 = new DateTime("tomorrow");

echo("test1: ");
var_dump($test1);
echo("<br/>test2: ");
var_dump($test2);

echo("Now === Now: ");
var_dump($test1 === $test2);

echo("<br/>Now == Now: ");
var_dump($test1 == $test2);

echo("<br/>Now < Now: ");
var_dump($test1 < $test2);

echo("<br/>Now > Now: ");
var_dump($test1 > $test2);

echo("<br/>Now < tomorrow: ");
var_dump($test2 < $test3);

echo("<br/>Now > tomorrow: ");
var_dump($test2 > $test3);

输出

    test1: object(DateTime)#36 (3) { ["date"]=> string(19) "2015-06-23 14:44:25" ["timezone_type"]=> int(3) ["timezone"]=> string(15) "America/Chicago" } 
    test2: object(DateTime)#37 (3) { ["date"]=> string(19) "2015-06-23 14:44:25" ["timezone_type"]=> int(3) ["timezone"]=> string(15) "America/Chicago" } 
    Now === Now: bool(false) 
    Now == Now: bool(true) 
    Now < Now: bool(false) 
    Now > Now: bool(false) 
    Now < tomorrow: bool(true) 
    Now > tomorrow: bool(false)

解决方法:

在对象比较的情况下===不仅检查值和对象类型,但它也将检查引用.这就是为什么在你的情况下===因为两个单独的实例而返回false.

只是为了澄清检查一下: –

https://eval.in/386378

注意: – 在第一种情况下,两个单独的实例是$test1和$test2,这就是为什么===返回false甚至是对象类型,并且值相等.

但在第二种情况下,因为$test1和$test2是相同的引用,所以它表明是真的.

同样在正常变量的情况下===仅检查值和数据类型.其中as ==始终只检查值,只要数据类型不同,它就不会给出正确的输出.因此在使用==时要小心.谢谢.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐