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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-08-29 08:50:55
オリジナル
1303 人が閲覧しました

リーリー

ゲーム属性が存在しないのに、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()だって

、🎜
関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート