Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php:object Comparison(其中一个通过webservice发送)_Php_Web Services_Object_Soap_Comparison - Fatal编程技术网

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)将始终为真。然而,我可以看到返回的两个字符串完全相同。当然,我可以创建一个函数来逐个属性检查属性,但我更愿意避免这种情况。==对于值和===对于对象比较我认为他是在尝试比较对象的值,而不是类型。在哪里声明===用于对象比较?==肯定没有帮助)请看一下手册:实际上===在这里不是解决方案。