PHP-объект isset и/или пустой
Есть ли способ проверить, есть ли у объекта какие-либо поля? Например, у меня есть 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, и я получаю только объект без полей или объекта с полями.
Ответы
Ответ 1
Обновлено для отражения текущего поведения, 5/30/12
empty() используется для работы, но поведение empty() несколько раз менялось. Как всегда, php docs всегда являются лучшим источником точного поведения, и комментарии на этих страницах обычно дают хорошую историю изменений с течением времени. Если вы хотите проверить отсутствие свойств объекта, в настоящий момент очень защитный метод:
if (is_object($theObject) && (count(get_object_vars($theObject)) > 0)) {
...
Ответ 2
Один из кода, внесенного пользователем на странице 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!";
}
?>