0

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 と等しいため、関数は空の配列しか返さないことを示唆しています。どこかで愚かな間違いを犯していると確信しているので、どんな提案でも大歓迎です。

4

2 に答える 2

3

PHP では、現在のクラスのメソッドを呼び出したり、プロパティを使用したりする場合は、常に以下を使用する必要があります$this

function __construct($feedUrl) {
    $this->feedData = simplexml_load_file($feedUrl);
}


function parse() {
        echo " \n begin parsing \n";
        $rawArticles = $this->feedData->channel[0];
        print_r($rawArticles);
        ...
}
于 2013-07-19T14:13:55.070 に答える