3

simplexml 評価で非常に扱いにくい特定の問題が発生しました。

コード:

$simplexml = simplexml_load_string($xmlstring);
var_dump($simplexml);
var_dump($simplexml == false); //this comparison

var_dump($simplexml) は、simplexml の実際の構造を返しますが、比較すると、この特定の simplexml に対して「true」が返されます。これは、契約のために構造を表示できません。
他の XML 文字列を試してみたところ、比較で「false」が返されたため、これは非常に具体的な問題であると確信しています。

$simplexml = simplexml_load_string('<a><b>test</b></a>');
var_dump($simplexml); //returns the actual structure
var_dump($simplexml == false); //returns false

「===」演算子を使用して問題を解決しましたが、機能させるだけでは満足できません。「==」演算子が true を返す理由を理解したい。
2 つの演算子と SimpleXMLElement について読んだところ、両方の演算子に対して「false」が返されるはずです。正常に解析された SimpleXMLElement とブール値の「false」を比較して「true」を返す理由として考えられるものは何ですか?

4

3 に答える 3

2
var_dump($simplexml == false); //returns false

これは予想される動作であり、「緩い」データ型指定によるデータ比較によって説明されます。PHP では、NULL、ゼロ、ブール値の FALSE は「偽」値と見なされます。それ以外はすべて「真実」と見なされます。括弧内で、PHP は式の評価を実行します。この場合、PHP は名前付き変数 OBJECT とブール値 FALSE の比較を評価します。それらは同じではないため、比較からの戻り値は FALSE であり、これが *var_dump()* が出力するものです。

これは、if() ステートメントで有利に使用できます。例:

$simplexml = SimpleXML_Load_String('<a><b>test</b></a>');
if ($simplexml) { /* process the object */ }
else { /* process the failure to load the XML */ }
于 2012-12-16T13:51:18.463 に答える
1

ここを見てください: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

空のタグから作成された SimpleXML オブジェクトは false と評価されると書かれています。多分それが起こっていることですか?

于 2012-04-12T20:18:06.860 に答える