当数组为null时,PHP没有对象错误

时间:2014-07-26 09:14:21

标签: php rss

我有一个RSS提要URL,我正在使用以下PHP函数从中提取值。

$xml = simplexml_load_file($url);

$url产生一些结果时,它的工作完美。我正在使用count()函数来计算从RSS提要中提取的数组的长度。

$length=sizeof($xml->rs[0]->r);

但是当RSS中没有结果时,它会给我错误

Trying to get property of non-object in /home/****/public_html/index.php on line 5 

如果RSS提要URL中没有结果,有没有办法回显消息。

当我做print_r($xml) ob没有结果$xml时,我得到了

SimpleXMLElement Object ( [@attributes] => Array ( [type] => noresults [code] => 1.1 ) [title] => SimpleXMLElement Object ( ) [subtitle] => SimpleXMLElement Object ( ) [text] => SimpleXMLElement Object ( ) [base] => SimpleXMLElement Object ( ) ) )

我到处搜索,找不到解决方案..感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

if(is_a($xml,"SimpleXMLElement"))
{
    //process XML here
}
else
{
    die("Unable to load XML from URL");
}

is_a函数有两个参数 - 第一个是对象变量,第二个是我们检查它是否属于的类。

根据您的问题的更新,看起来您正在获取服务返回的XML对象,而不管是否有结果。在这种情况下,您需要检查返回的XML,以检查它是否有价值或者说没有结果。

注意返回值( [@attributes] => Array ( [type] => noresults [code] => 1.1 )

您可以使用SimpleXMLElement::attributes函数循环和示例属性。在PHP Manual for SimpleXMLElement

中记录了测试它所需的一切

答案 1 :(得分:0)

$xml = simplexml_load_file($url);

if ($xml && property_exists($xml, 'rs') && is_array($xml->rs) && isset($xml->rs[0]) && is_object($xml->rs[0]) && property_exists($xml->rs[0], 'r')) {
    // do something with $xml->rs[0]->r
} else {
    echo "Not available to access $xml->rs[0]->r";
}