ホームページ  >  記事  >  バックエンド開発  >  simplexml_load_string($xml_str) によって返されたオブジェクトを使用して、存在しない属性にアクセスします。空の場合は true

simplexml_load_string($xml_str) によって返されたオブジェクトを使用して、存在しない属性にアクセスします。空の場合は true

WBOY
WBOYオリジナル
2016-08-29 08:50:551207ブラウズ

リーリー

ゲーム属性が存在しないのに、var_dump には結果が存在します。なぜですか?
simplexml_load_string($xml_str) によって返されたオブジェクトを使用して、存在しない属性にアクセスします。空の場合は true

返信内容:

リーリー

ゲーム属性が存在しないのに、var_dump には結果が存在します。なぜですか?
simplexml_load_string($xml_str) によって返されたオブジェクトを使用して、存在しない属性にアクセスします。空の場合は true

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内部实现了settergetter, 就像魔术方法 __set()__get()だって

、🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。