2011-11-08 111 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 
相关问题