2011-11-08 16 views
0

私はPHPとSimpleXMlの新人です。SimpleXMLオブジェクトがTRUEと評価されるのはなぜですか?

これらのいずれのテストでも私は偽を期待しません。

$xml=new SimpleXMLElement('<a><b>123</b></a>'); 
    var_dump($xml); 
    echo $xml ? "true": "false"; 

又は

$xml=new SimpleXMLElement('<a><b></b></a>'); 
    var_dump($xml); 
    echo $xml ? "true": "false"; 

しかし第二戻り偽XMLSimpleElementオブジェクトが返されていても。 私はどこにでも名前空間を持つXML文書で同じ問題があります。

は、それは私が

しかし$xml->childen($namespace)にはない偽 if (!xml)リターンとして失敗したXML解析のためにテストすることはできませんを意味します。

TIA エフライム

+2

どちらのスニペットは、私にとって真の印刷...あなたのPHPのバージョンは何ですか? – BoltClock

+1

どのバージョンのPHPをお使いですか?私のphp5.3.5/win32では 'true'が表示されます。 – VolkerK

+1

2番目のコードは次のようになります: '致命的なエラー:キャッチされていない例外 'Exception':メッセージは '/t.php:2'の' StringとしてXMLとして解析できませんでした。 'http://codepad.org/KIbscPGh –

答えて

1

私は問題を再現できませんが、いくつかのヒントを提供しようとします。

まず、converting objects to booleansここでルールがあります:

When converting to boolean, the following values are considered FALSE :
[...] the special type NULL (including unset variables)
[...] SimpleXML objects created from empty tags

Every other value is considered TRUE (including any resource).

第二に、SimpleXMLElement constructorは常にオブジェクトを返しますが、それは警告と例外をスローすることができます。

したがって、これらは可能性があります:

// Casts as TRUE because it's an object 
$xml=new SimpleXMLElement('<a><b>123</b></a>'); 
var_dump($xml, (bool)$xml); 
unset($xml); 

// Casts as FALSE because it's an SimpleXMLElement object for an empty tag 
$xml=new SimpleXMLElement('<a />'); 
var_dump($xml, (bool)$xml); 
unset($xml); 

// Casts as FALSE because the $xml variable was never set sucessfully so it's not even set 
try{ 
    $xml=new SimpleXMLElement(''); 
}catch(Exception $e){ 
} 
var_dump($xml, (bool)$xml); // Notice: Undefined variable: xml 
unset($xml); 
0

PHPのオブジェクト(5+)TRUEに評価され、常にを教えてください。

1つの例外は空のタグから作成SimpleXMLオブジェクトである - 参照http://php.net/manual/en/language.types.boolean.php

$xml = new SimpleXMLElement('<b></b>'); 

は、FALSESimpleXMLオブジェクト(FALSE === (bool) $xml;)としての資格。

しかし

$xml = new SimpleXMLElement(''); 

は例外をスローし、キャッチされない場合は、あなたのプログラムを停止します。キャッチされた場合、$xmlは設定されません。

それが失敗した場合に例外をスローしますSimpleXMLElementオブジェクトの作成:

0

あなたはhttp://www.php.net/manual/en/language.types.boolean.php上の偽真と評価され、すべてを/(「booleanに変換する場合、次の値はFALSEとみなされ、」見つける。)を見つけることができます。次のコードでは、必要な処理を行う必要があります。

try 
{ 
    $xml=new SimpleXMLElement(''); 
    var_dump($xml); 
    echo 'true'; 
} 
catch 
{ 
    echo 'false'; 
} 

true/falseに評価するには、明示的にfalseに評価することができます。

$test = ''; 
echo $test ? 'true' : 'false'; // will output false 
echo $test !== false ? 'true' : 'false'; // will output true 
関連する問題