PHP变量在构造函数中实例化,重置为null

时间:2013-07-19 14:10:21

标签: php constructor null rss simplexml

我正在用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()”(调用此函数的代码打印出返回值)。建议我,当解析函数运行时,$ feedData在某种程度上等于NULL,因此该函数只返回一个空数组。我确信我在某个地方犯了一个愚蠢的错误,所以任何建议都会非常感激。

2 个答案:

答案 0 :(得分: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);
        ...
}

答案 1 :(得分:-1)

class ArticleFormatter {

    private $feedData;

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

    function parse() {
        print_r($this->feedData);
    }
}

//尝试这个,我相信你会知道如何做下一步