【问题标题】:PHP Variable Instantiated in Constructor resetting to null在构造函数中实例化的 PHP 变量重置为 null
【发布时间】:2013-07-19 14:10:21
【问题描述】:

我正在用 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() 按原样运行时,打印出来的只是“开始解析起始循环数组 ()”(调用此函数的代码会打印出返回值)。建议我,当 parse 函数运行时,$feedData 不知何故等于 NULL,因此该函数只返回一个空数组。我确信我在某个地方犯了一个愚蠢的错误,所以任何建议都会非常感激。

【问题讨论】:

  • 您不能以这种方式在您的方法中访问 $feedData。您应该通过 $this 作为对象属性访问它

标签: php constructor null rss simplexml


【解决方案1】:

在 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);
        ...
}

【讨论】:

  • 哦,所以我实际上在这里处理了 3 个完全不同的变量。我将更多地阅读变量范围。谢谢!
【解决方案2】:
class ArticleFormatter {

    private $feedData;

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

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

//试试这个,我相信你会知道下一步该怎么做

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多