У меня два DateTimeImmtable
объекты, и ожидая, что они будут идентичны, я удивлен, увидев, что они не являются. Т.е. почему следующее false
?
<?php
$d = new \DateTimeImmutable('2018-01-01');
$e = new \DateTimeImmutable('2018-01-01');
var_dump($d === $e);
Конечно $d == $e
оценивает true
Это не имеет ничего общего с DateTimeImmutable
объекты, это просто, как PHP имеет дело со сравнением объектов. От руководство:
При использовании оператора идентичности (===) переменные объекта идентичны тогда и только тогда, когда они ссылаются на один и тот же экземпляр одного и того же класса.
Сравнение любых двух разных экземпляров с использованием этого оператора всегда возвращает false, независимо от значений любых свойств.
$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: они имеют дело с объектом как с другим объектом или экземпляром, при сравнении двух объектов они имеют дело с двумя объектами как с разными объектами.
когда ты использовал ===
сравнивать объект или экземпляр (два экземпляра одного класса), затем они обрабатывают эти объекты как разные объекты, и результат ложен