php stdClass检查属性是否存在

时间:2013-12-04 20:51:57

标签: php

我在这里已经阅读了一些类似的问题但不幸的是找到了我的案例的解决方案。

API连接的部分输出为;

stdClass Object ( [page] => 0 [items] => 5 [total] => 5 [saleItems] => stdClass Object ( [saleItem] => Array ( [0] => stdClass Object ( [reviewState] => approved [trackingDate] => 2013-11-04T09:51:13.420+01:00 [modifiedDate] => 2013-12-03T15:06:39.240+01:00 [clickDate] => 2013-11-04T09:06:19.403+01:00 [adspace] => stdClass Object ( [_] => xxxxx [id] => 1849681 ) [admedium] => stdClass Object ( [_] => Version 3 [id] => 721152 ) [program] => stdClass Object ( [_] => yyyy [id] => 10853 ) [clickId] => 1832355435760747520 [clickInId] => 0 [amount] => 48.31 [commission] => 7.25 [currency] => USD [gpps] => stdClass Object ( [gpp] => Array ( [0] => stdClass Object ( [_] => 7-75 [id] => z0 ) ) ) [trackingCategory] => stdClass Object ( [_] => rers [id] => 68722 ) [id] => 86erereress-a9e4-4226-8417-a46b4c9fd5df )

某些字符串不包含gpps属性。

我所做的如下

foreach($sales->saleItems->saleItem as $sale)
{
    $status     = $sale->reviewState;

    if(property_exists($sale, gpps)) 
    {
        $subId      = $sale->gpps->gpp[0]->_;
    }else{
        $subId      = "0-0";
    }
}

我想要的是我的gpps属性不包含在db中存储为0-0的字符串$ subId中,否则从字符串中获取数据。但是如果没有gpps,它就无法获得。

我的错误在哪里?

4 个答案:

答案 0 :(得分:69)

更改

if(property_exists($sale, gpps)) 

if(property_exists($sale, "gpps"))

根据property_exists函数的规范,注意现在gpps如何作为字符串传递:

  

bool property_exists ( mixed $class , string $property )

     

此函数检查指定类中是否存在给定属性。

     

注意:   与isset()相反,即使该属性的值为property_exists()TRUE也会返回NULL

答案 1 :(得分:1)

property_exists是为此目的而设计的方法。

bool property_exists(混合$ class,字符串$ property)

此函数检查指定类中是否存在给定属性。

注意: 与isset()相反,即使属性值为NULL,property_exists()也返回TRUE。

答案 2 :(得分:0)

尝试一个简单的hack并使用count,因为该属性包含一个数组,我想,count(array)== 0与未设置属性时的情况相同。

foreach($sales->saleItems->saleItem as $sale)
{
 $status     = $sale->reviewState;

 if(@count($sale->gpps->gpp) && count($sale->gpps->gpp) > 0) 
 {
    $subId      = $sale->gpps->gpp[0]->_;
 }else{
    $subId      = "0-0";
 }
}

当然,这不是最漂亮的解决方案,但由于php功能不能按预期工作,我觉得更务实一点。

答案 3 :(得分:0)

另一种方式,get_object_vars

$obj = new stdClass();
$obj->name = "Nick";
$obj->surname = "Doe";
$obj->age = 20;
$obj->adresse = null;

$ar_properties[]=get_object_vars($obj);

foreach($ar_properties as $ar){
    foreach ($ar as $k=>$v){        
    if($k =="surname"){
        echo "Found";
    }
    }
}