PHP – 警告 – 未定义的属性:stdClass – 修复?

我在我的错误日志中得到了这个警告,并想知道如何在我的代码中纠正这个问题。

警告:PHP注意:未定义的属性:stdClass :: $logging在第440行的script.php中

一些代码:

// Parse object to get account id's // The response doesn't have the records attribute sometimes. $role_arr = getRole($response->records); // Line 440 

如果logging存在,则返回

 stdClass Object ( [done] => 1 [queryLocator] => [records] => Array ( [0] => stdClass Object ( [type] => User [Id] => [any] => stdClass Object ( [type] => My Role [Id] => [any] => <sf:Name>My Name</sf:Name> ) ) ) [size] => 1 ) 

如果logging不存在,则返回响应

 stdClass Object ( [done] => 1 [queryLocator] => [size] => 0 ) 

我在想像array_key_exists()的function,但对象,任何东西? 或者我正在做这个错误的方式?

 if(isset($response->records)) print "we've got records!"; 

isset()适用于顶层,但empty()对于查找是否设置嵌套值更有用。 例如:

 if(isset($json['foo'] && isset($json['foo']['bar'])) { $value = $json['foo']['bar'] } 

要么:

 if (!empty($json['foo']['bar']) { $value = $json['foo']['bar'] } 

如果你想使用property_exists ,你需要用get_class()来获得类的名字

在这种情况下,它将是:

  if( property_exists( get_class($response), 'records' ) ){ $role_arr = getRole($response->records); } else { ... } 

在这种情况下,我会使用:

 if (!empty($response->records)) { // do something } 

如果财产不存在,你将不会得到任何丑陋的通知,并且你会知道你实际上有一些logging可以处理,即。 $ response->logging不是一个空数组,NULL,FALSE或其他空值。

答案本身似乎有logging的大小。 您可以使用它来检查是否存在logging。 就像是:

 if($response->size > 0){ $role_arr = getRole($response->records); } 

根据您是否在寻找成员或方法,您可以使用这两个函数中的任何一个来查看特定对象中是否存在成员/方法:

http://php.net/manual/en/function.method-exists.php

http://php.net/manual/en/function.property-exists.php

更一般的如果你想要所有的人:

http://php.net/manual/en/function.get-object-vars.php

如果认为这将起作用:

 if(sizeof($response->records)>0) $role_arr = getRole($response->records); 

新定义的proprities也包括在内。

替代方法:只需使用“@”运算符来消除警告。

$ var = getRole(@ $ response-> records);

请参阅: http : //php.net/manual/en/language.operators.errorcontrol.php