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 ==始终只检查值,只要数据类型不同,它就不会给出正确的输出.因此在使用==时要小心.谢谢.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...