Heim >Backend-Entwicklung >PHP-Tutorial >Verwenden Sie das von simplexml_load_string($xml_str) zurückgegebene Objekt, um auf nicht vorhandene Attribute zuzugreifen, leer ist wahr
<code>$xml_str = <<<EOT <xml> <fee_type><![CDATA[CNY]]></fee_type> <return_code><![CDATA[SUCCESS]]></return_code> <trade_type><![CDATA[NATIVE]]></trade_type> </xml> EOT; $obj = simplexml_load_string($xml_str); var_dump($obj->game); if(empty($obj->game)) { echo '空的'; } else { echo "不空"; } </code>
Das Spielattribut existiert nicht, aber var_dump hat Ergebnisse. Warum?
<code>$xml_str = <<<EOT <xml> <fee_type><![CDATA[CNY]]></fee_type> <return_code><![CDATA[SUCCESS]]></return_code> <trade_type><![CDATA[NATIVE]]></trade_type> </xml> EOT; $obj = simplexml_load_string($xml_str); var_dump($obj->game); if(empty($obj->game)) { echo '空的'; } else { echo "不空"; } </code>
Das Spielattribut existiert nicht, aber var_dump hat Ergebnisse. Warum?
Obwohl das Attribut game
nicht vorhanden ist, wird die magische Methode SimpleXMLElement
von __get()
aufgerufen, wenn dieses Attribut direkt abgerufen wird. Diese Methode gibt ein leeres Objekt zurück und wird von var_dump
ausgedruckt.
Aber das Objekt sollte wahr sein, wenn empty()
beurteilt wird. Warum ist es hier falsch?
Da empty()
nicht gleich einem direkten booleschen Urteil ist, sondern empty($var) === isset($var) && $var
, wird zuerst die magische Methode SimpleXMLElement
von __isset()
aufgerufen und __isset()
gibt zurück, dass dieses Attribut nicht existiert, und Folgendes __get()
Es wird automatisch übersprungen.
Weil simplexmlelement
setter
und getter
intern implementiert, genau wie die magischen Methoden __set()
und __get()
,