<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에 결과가 있는 이유는 무엇입니까?
<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에 결과가 있는 이유는 무엇입니까?
game
속성은 없지만 이 속성을 직접 얻으면 SimpleXMLElement
의 매직 메소드 __get()
가 호출되고 이 메소드는 var_dump
에 의해 출력됩니다.
근데 empty()
가 판단되면 대상이 참이어야 하는데 여기서는 왜 거짓인가요?
empty()
은 직접적인 불리언 판단이 아니라 empty($var) === isset($var) && $var
이므로 SimpleXMLElement
의 매직 메소드 __isset()
가 먼저 호출되고, __isset()
은 이 속성이 존재하지 않는다고 반환하고, 다음 __get()
자동으로 건너뛰게 됩니다.
simplexmlelement
은 setter
, getter
과 마찬가지로 __set()
, __get()
을 내부적으로 구현하기 때문에