2010-08-10 9 views
13

Gibt es eine Möglichkeit zu überprüfen, ob ein Objekt Felder enthält? Zum Beispiel habe ich einen Soap-Server, den ich mit einem Soap-Client abfrage, und wenn ich eine get-Methode anrufe, werde ich entweder ein Objekt zurückgeben, das Felder enthält, die die Soap-Abfrage definieren, sonst werde ich Objekt (stdClass) # 3 (0) {}.PHP-Objekt isset und/oder leer

Gibt es eine Möglichkeit zu sagen, ob das Objekt etwas hat?

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() 

Diese Methode sollte entweder ein Objekt oder false zurück, und ich bin nur ein Objekt ohne Felder oder ein Objekt mit Feldern zu empfangen.

Antwort

20

Aktualisiert aktuelle Verhalten zu reflektieren, 5/30/12

empty() verwendet, für diese zu arbeiten, aber das Verhalten von empty() wurde mehrfach geändert. Wie immer, die PHP-Dokumente sind immer die beste Quelle für genaues Verhalten und die Kommentare auf diesen Seiten bieten in der Regel eine gute Geschichte der Änderungen im Laufe der Zeit. Wenn Sie einen Mangel an Objekteigenschaften, eine sehr defensive Methode zur Zeit prüfen wollen, ist:

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

, dass der Trick funktioniert. – Chris

+0

Für mich gibt dies einen Fehler: "PHP Schwerwiegender Fehler: Funktion Rückgabewert im Schreibkontext kann nicht verwendet werden". AFAIK, empty() kann nicht für den Rückgabewert einer Funktion verwendet werden, nur für Variablen. Fehle ich etwas? –

+1

@MW - Nur ein paar Jahre. Diese Antwort litt unter StackOverflow Staub, wo Antworten über Technologie mit der Zeit ungültig werden können. Ich habe es aktualisiert, um relevanter zu sein, danke für den Kommentar! –

-3

Einer des Benutzercode trug auf dem php empty() Seite, die ich denke, Adressen, Ihr Problem zu überprüfen, ob Das Array ist gefüllt, hat aber leere Werte.

http://www.php.net/manual/en/function.empty.php#97772 zu finden, wenn ein Array Werte nichts als leere (string) hat:

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

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