сравнение — Почему идентичный оператор в php (===) не работает с объектами DateTimeImmutable?

У меня два DateTimeImmtable объекты, и ожидая, что они будут идентичны, я удивлен, увидев, что они не являются. Т.е. почему следующее false?

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

var_dump($d === $e);

Конечно $d == $e оценивает true

4

Решение

Это не имеет ничего общего с DateTimeImmutable объекты, это просто, как PHP имеет дело со сравнением объектов. От руководство:

При использовании оператора идентичности (===) переменные объекта идентичны тогда и только тогда, когда они ссылаются на один и тот же экземпляр одного и того же класса.

Сравнение любых двух разных экземпляров с использованием этого оператора всегда возвращает false, независимо от значений любых свойств.

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

По вопросам рекламы [email protected]