【问题标题】:Strict comparison of DateTime ObjectsDateTime 对象的严格比较
【发布时间】:2017-09-21 09:14:46
【问题描述】:

我正在对一个对象列表进行严格比较,只是为了识别可能已经改变的对象,例如:

if ($oldValue !== $newValue)

在某些情况下,$oldValue$newValueDateTime 对象。

调试我的应用程序在比较它们之前,我得到了两个值的以下输出:

日期时间对象 ( [日期] => 2017-04-24 00:00:00.000000 [时区类型] => 3 [时区] => UTC )

日期时间对象 ( [日期] => 2017-04-24 00:00:00.000000 [时区类型] => 3 [时区] => UTC )

为什么我的比较/条件仍然正确?

【问题讨论】:

标签: php datetime object comparison-operators


【解决方案1】:

在 PHP 中比较对象时,=== 运算符不比较值。 It compares instances。这意味着除非两个对象都指向同一个对象,否则它们并不严格相等。

当使用比较运算符 (==) 时,对象变量会被比较 以简单的方式,即:两个对象实例相等,如果它们 具有相同的属性和值(值与 == 进行比较),并且 是同一类的实例。

使用恒等运算符 (===) 时,对象变量是相同的 当且仅当它们引用同一个类的同一个实例。

【讨论】:

  • 谢谢,将接受答案。这意味着在某种情况下,我想避免 "1"1.0 (==) 相等但示例对象相等 (===) 我需要先检查类型,然后才能比较我的值?
  • 那是正确的。或者,将值更改为 unix 时间戳,然后进行严格比较。
  • 谢谢,我不知道预先的类型,也不想照顾(这在您的提案中也是必要的)。但我现在明白我需要这样做。
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多