当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等;而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
PHP中对象间的"=="比较通过函数zend_std_compare_objects()
处理。
static int zend_std_compare_objects(zval *o1, zval *o2)
{
...
if (zobj1->ce != zobj2->ce) {
return 1; /* different classes */
}
if (!zobj1->properties && !zobj2->properties) {
//逐个比较properties_table
...
}else{
//比较properties
return zend_compare_symbol_tables(zobj1->properties, zobj2->properties);
}
}
"==="的比较通过函数zend_is_identical()
处理,比较简单,这里不再展开。