2015-05-10 3 views
1
$a = new stdClass; 
$a->first = 'James'; 
$a->last = 'Doe'; 

$b = (object) [ 
    'first' => 'James', 
    'last' => 'Doe', 
]; 

echo 'Loose compare: ' . ($a == $b ? 'equal' : 'different') . PHP_EOL; // equal 
echo 'Type compare: ' . (gettype($a) == gettype($b) ? 'equal' : 'different') . PHP_EOL; // equal 
echo 'Strict compare: ' . ($a === $b ? 'equal' : 'different') . PHP_EOL; // different 

Как получается, что строгое сравнение не подходит? И что еще более важно, они могут быть строго одинаковыми?PHP строгое сравнение двух объектов не является ложным

+0

'$ Ь = $ а; echo ($ a === $ b? 'equal': 'different'). PHP_EOL; ' –

ответ

7

Строгие проверки сравнения, если $a и $b являются то же самое объект (то же место памяти). Единственный способ сделать их же (строго) будет $a = $b;

См http://php.net/manual/en/language.oop5.object-comparison.php для справки

+0

, так что руководство по обслуживанию http://php.net/manual/en/language.operators.comparison.php говорит « $ a === $ b Идентичный ИСТИНА, если $ a равно $ b, и они одного типа ». Должен ли он также упомянуть «и занимать ту же ячейку памяти»? или, скорее, в данном случае ", и если они являются объектами, то они являются одним и тем же экземпляром" – Geo

+1

На странице документа, которую вы связываете, действительно казалось бы, что '$ a === $ b' должно быть истинным для двух экземпляров того же класса с равными значениями атрибутов. Страница «Сравнение объектов» более точна. Возможно, вы должны сообщить об этом как об ошибке (в документации есть ссылка). – Teyras

Смежные вопросы