ホームページ >バックエンド開発 >PHPチュートリアル >simplexml_load_string($xml_str) によって返されたオブジェクトを使用して、存在しない属性にアクセスします。空の場合は true
リーリー
ゲーム属性が存在しないのに、var_dump には結果が存在します。なぜですか?
ゲーム属性が存在しないのに、var_dump には結果が存在します。なぜですか?
game
属性は存在しませんが、この属性を直接取得すると、SimpleXMLElement
のマジック メソッド __get()
が呼び出され、このメソッドは、空のオブジェクトが var_dump
によって出力されたことを返します。 game
属性不存在,但是直接获取这个属性时,会调用SimpleXMLElement
的魔术方法__get()
,这个方法返回了一个空对象,并被var_dump
打印了出来。
但是对象在empty()
判断时应该为真呀,为什么这里是假呢?
因为empty()
并不等于直接的布尔判断,而是empty($var) === isset($var) && $var
,所以这里会先调用SimpleXMLElement
的魔术方法__isset()
,而__isset()
返回了这个属性不存在,后面的__get()
しかし、empty()
が判定されるとき、オブジェクトは true であるはずです。なぜここで false になるのでしょうか。
empty()
は直接のブール判定と等しくなく、empty($var) === isset($var) && $var
であるため、ここでは最初に SimpleXMLElement
のマジック メソッド __isset()
が呼び出され、__isset()
はこの属性が存在しないことを返し、次の >__get() は自動的にスキップされます。 <p class="answer fmt" data-id="1020000006735953">
</p>
<p>
<code>simplexmlelement
内部实现了setter
和getter
, 就像魔术方法 __set()
和__get()
だって、🎜