2011-11-08 120 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解析爲 if (!xml)返回false

$xml->childen($namespace)沒有。

請告知 TIA 蓮

+2

兩個片段打印對我來說真的......什麼是你的PHP版本? – BoltClock

+1

你使用哪個版本的php?用我的php5.3.5/win32打印'true'。 – VolkerK

+1

第二個引發以下錯誤:'致命錯誤:在'/t.php:2'這裏的消息'String can not be parsed as XML''Uncaught exception'Exception'':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總是

一個例外是從空標籤創建SimpleXML對象 - 見http://php.net/manual/en/language.types.boolean.php

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

資格作爲這樣的FALSESimpleXML對象(FALSE === (bool) $xml;)。

然而

$xml = new SimpleXMLElement(''); 

拋出一個異常,將停止你的程序,如果沒有抓到。如果被捕獲,$xml未設置。

0

你可以找到一個評估爲真的一切/上http://www.php.net/manual/en/language.types.boolean.php假(找到「當轉換爲boolean時,以下值被認爲是FALSE:」)

創建一個SimpleXMLElement對象,如果失敗會拋出異常。下面的代碼應該做你需要的東西:

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

評價爲真/假,你可能會尋找到===,明確評估爲假。

$test = ''; 
echo $test ? 'true' : 'false'; // will output false 
echo $test !== false ? 'true' : 'false'; // will output true 
相關問題