PHP对象isset和/或empty

13

有没有一种方法可以检查一个对象是否具有任何字段?例如,我正在使用soap客户端查询soap服务器,如果调用get方法,则返回包含定义我所做的soap查询的字段的对象,否则我将返回对象(stdClass)#3(0){}。

有没有办法判断对象是否有任何内容?

    public function get($id){
    try{
        $client = new soapclient($this->WSDL,self::getAuthorization());
        $result = $client->__soapCall('get', array('get'=> array('sys_id'=>$id)));
        if(empty($result)){$result = false; }

    }catch(SoapFault $exception){
        //echo $exception;      
        $result = false;
    } 
    return $result;
}//end get() 

这个方法应该返回一个对象或false,但我只收到一个没有字段的对象或一个带有字段的对象。

2个回答

22

更新以反映当前行为,5/30/12

empty()曾经可以用于此,但empty()的行为已经多次更改。与往常一样,php文档始终是确切行为的最佳来源,这些页面上的评论通常提供了随时间变化的良好历史记录。如果您想检查对象属性是否为空,目前非常防御性的方法是:

if (is_object($theObject) && (count(get_object_vars($theObject)) > 0)) {
    ...

对我来说,这会产生一个错误:“PHP致命错误:无法在写上下文中使用函数返回值”。据我所知,empty()不能用于函数的返回值,只能用于变量。我有什么遗漏吗? - MW.
1
@MW - 只有几年时间。这个答案受到了StackOverflow的影响,技术方面的答案随着时间的推移可能会变得无效。我已经更新了它,使其更加相关,感谢您的评论! - Kevin Vaughan
2
@KevinVaughan 感谢您更新答案!干杯 - Chris

-3

在php empty()页面上,有一个用户贡献的代码,我认为它可以解决您检查数组是否已填充但具有空值的问题。

http://www.php.net/manual/en/function.empty.php#97772 要查找数组是否仅包含空(字符串)值:

<?php 
$foo = array('foo'=>'', 'bar'=>''); 
$bar = implode('', $foo); 

if (empty($bar)) { 
    echo "EMPTY!"; 
} else { 
    echo "NOT EMPTY!"; 
} 
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接