5

我有两个DateTimeImmtable对象,并期望它们是相同的,我很惊讶地发现它们不是。即,为什么是以下false

<?php
$d = new \DateTimeImmutable('2018-01-01');
$e = new \DateTimeImmutable('2018-01-01');

var_dump($d === $e);

当然$d == $e评估为true

4

2 回答 2

3

它与对象无关DateTimeImmutable,它只是 PHP 处理对象比较的方式。从手册

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

无论任何属性的值如何,使用此运算符比较任何两个不同的实例都将始终返回 false。

于 2018-03-07T11:38:31.970 回答
2
$d = new \DateTimeImmutable('2018-01-01');
$e = new \DateTimeImmutable('2018-01-01');

var_dump($d);
var_dump($e);

输出是

object(DateTimeImmutable)[1]
  public 'date' => string '2018-01-01 00:00:00' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/Paris' (length=12)
object(DateTimeImmutable)[2]
  public 'date' => string '2018-01-01 00:00:00' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/Paris' (length=12)

根据 PHP 手册:它们将对象作为不同的对象或实例处理,当您比较两个对象时,它们将 2 个对象作为不同的对象处理

当您用来===比较对象或实例(同一类的两个实例)时,它们会将这些对象视为不同的对象,结果为假

于 2018-03-07T11:43:49.793 回答