PHP-объект установлен и / или пуст - PullRequest
13 голосов
/ 10 августа 2010

Есть ли способ проверить, есть ли у объекта какие-либо поля? Например, у меня есть сервер мыла, к которому я обращаюсь с помощью мыльного клиента, и если я вызываю метод get, мне либо возвращается объект, содержащий поля, определяющие запрос мыла, который я сделал, в противном случае мне возвращается объект (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 голосов
/ 10 августа 2010

Обновлено, чтобы отразить текущее поведение, 5/30/12

empty () работал для этого, но поведение empty () менялось несколько раз.Как всегда, документы php всегда являются лучшим источником точного поведения, и комментарии на этих страницах обычно предоставляют хорошую историю изменений с течением времени.Если вы хотите проверить отсутствие свойств объекта, на данный момент очень защитный метод:

if (is_object($theObject) && (count(get_object_vars($theObject)) > 0)) {
    ...
0 голосов
/ 10 августа 2010

Один из предоставленных пользователем кодов на странице 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!"; 
} 
?>
...