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

Verwenden Sie das von simplexml_load_string($xml_str) zurückgegebene Objekt, um auf nicht vorhandene Attribute zuzugreifen, leer ist wahr

WBOY
WBOYOriginal
2016-08-29 08:50:551278Durchsuche

<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?
Verwenden Sie das von simplexml_load_string($xml_str) zurückgegebene Objekt, um auf nicht vorhandene Attribute zuzugreifen, leer ist wahr

Antwortinhalt:

<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?
Verwenden Sie das von simplexml_load_string($xml_str) zurückgegebene Objekt, um auf nicht vorhandene Attribute zuzugreifen, leer ist wahr

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn