>  기사  >  백엔드 개발  >  존재하지 않는 속성에 액세스하려면 simplexml_load_string($xml_str)에서 반환된 객체를 사용하세요. 비어 있으면 true입니다.

존재하지 않는 속성에 액세스하려면 simplexml_load_string($xml_str)에서 반환된 객체를 사용하세요. 비어 있으면 true입니다.

WBOY
WBOY원래의
2016-08-29 08:50:551207검색

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

game 속성이 존재하지 않지만 var_dump에 결과가 있는 이유는 무엇입니까?
존재하지 않는 속성에 액세스하려면 simplexml_load_string($xml_str)에서 반환된 객체를 사용하세요. 비어 있으면 true입니다.

답글 내용:

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

game 속성이 존재하지 않지만 var_dump에 결과가 있는 이유는 무엇입니까?
존재하지 않는 속성에 액세스하려면 simplexml_load_string($xml_str)에서 반환된 객체를 사용하세요. 비어 있으면 true입니다.

game 속성은 없지만 이 속성을 직접 얻으면 SimpleXMLElement의 매직 메소드 __get()가 호출되고 이 메소드는 var_dump에 의해 출력됩니다.
근데 empty()가 판단되면 대상이 참이어야 하는데 여기서는 왜 거짓인가요?
empty()은 직접적인 불리언 판단이 아니라 empty($var) === isset($var) && $var이므로 SimpleXMLElement의 매직 메소드 __isset()가 먼저 호출되고, __isset()은 이 속성이 존재하지 않는다고 반환하고, 다음 __get()자동으로 건너뛰게 됩니다.

simplexmlelementsetter, getter과 마찬가지로 __set(), __get()을 내부적으로 구현하기 때문에

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.