PHP で小さな RSS パーサーを作成しています。simplexml を使用していますが、問題に遭遇しました。ArticleFormatter というクラスを作成しました。
class ArticleFormatter {
private $feedData;
function __construct($feedUrl) {
$feedData = simplexml_load_file($feedUrl);
}
function parse() {
echo " \n begin parsing \n";
$rawArticles = $feedData->channel[0];
print_r($rawArticles);
echo "\n";
$currentArticle = $rawArticles->item[0];
print_r($currentArticle);
$articles = array();
echo "\n starting loop \n";
for($i = 0; !is_null($currentArticle); $i++) {
echo "ran";
array_push($articles, $currentArticle);
$currentArticle = $rawArticles->item[$i + 1];
}
return $articles;
}
}
これが問題です。simplexml_load_file が正当な SimpleXMLElement を返していることはわかっています。コンストラクター内に print ステートメントを配置すると、あらゆる種類の xml 要素が出力され、さらに、$feedData->item[ 0] は正当な SimpleXMLElement です。これは、コンストラクターでも出力しようとしたためです。それでも、parse() をそのまま実行すると、出力されるのは「開始ループ Array ( ) の解析を開始する」だけです (この関数を呼び出すコードは戻り値を出力します)。parse 関数が実行されると、 $feedData はどういうわけか NULL と等しいため、関数は空の配列しか返さないことを示唆しています。どこかで愚かな間違いを犯していると確信しているので、どんな提案でも大歓迎です。