Php:object Comparison(其中一个通过webservice发送)
我试着比较两个像这样的物体:Php:object Comparison(其中一个通过webservice发送),php,web-services,object,soap,comparison,Php,Web Services,Object,Soap,Comparison,我试着比较两个像这样的物体: if($obj1==$obj2){ ... 但我的比较总是错误的 $obj1是my函数的参数(通过Web服务调用),类型为“MySoapObject” $obj2是从我的数据库加载的“MySoapObject”类型的对象 在我的测试打印中,两个对象都给出了以下信息: stdClass Object ( [establishment] => stdClass Object ( [f_establi
if($obj1==$obj2){
...
但我的比较总是错误的
$obj1是my函数的参数(通过Web服务调用),类型为“MySoapObject”
$obj2是从我的数据库加载的“MySoapObject”类型的对象
在我的测试打印中,两个对象都给出了以下信息:
stdClass Object
(
[establishment] => stdClass Object
(
[f_establishment_id] => 4
[f_name] => MyEstablishment
[f_display_name] => v
[f_main_web_link] =>
[f_contact] =>
[f_country_code] =>
[f_city] =>
[f_zip_code] =>
[f_postal_address] =>
[f_default_language] =>
[f_timezone] =>
[f_cloud_synchronisation_action] => TO_SYNC
)
[site_list] => Array
(
[0] => stdClass Object
(
[f_site_id] => Site1
[f_status] => TO_DISABLE
[f_name] => Site1
)
)
)
顺便说一句,如果我试一下:
if(print_r($obj1)==print_r($obj2)){
...
结果是真的
你知道问题出在哪里吗?如何解决?
感谢您的帮助。对于对象比较,您可以使用:
if($obj1===$obj2){
}
检查文档
检查此FYI,原因是
print\r($obj1)==print\r($obj2)
为TRUE
是因为print\r()
返回TRUE
,除非您传递了告诉它返回字符串的标志。所以你基本上是在比较TRUE==TRUE
,很明显,这是TRUE
。你读过这个吗?检查,两个对象是否真的是同一类的实例。顺便说一句:我很确定使用对象比较来处理嵌套对象的大小写不是一个好主意,因为递归。顺便说一句:如果你像字符串一样考虑比较,那么在将对象转换为字符串之前,你必须考虑对所有键进行排序。例如,您可以通过json_encode将对象转换为字符串。实际上,print_r($obj1)==print_r($obj2)将始终为真。然而,我可以看到返回的两个字符串完全相同。当然,我可以创建一个函数来逐个属性检查属性,但我更愿意避免这种情况。==对于值和===对于对象比较我认为他是在尝试比较对象的值,而不是类型。在哪里声明===用于对象比较?==肯定没有帮助)请看一下手册:实际上===在这里不是解决方案。