PHP中的匿名函数

时间:2014-02-08 16:28:25

标签: php

我正在用PHP开发Android Play商店的网络抓取工具,我遇到了一些麻烦。 这是我用来获取应用评论的功能:

function reviews($url_to_crawl , $crawler)  {
        $reviews_contents = array();
        if (num_reviews($url_to_crawl, $crawler)) {
                $crawler->filter('.review-body')->each(function(Symfony\Component\DomCrawler\Crawler $node, $i) use ($reviews_contents) {
            $reviews_contents[$i] = trim($node->text());
            });
        }
        return $reviews_contents;
 }

现在$reviews_contents是空的,我猜是因为我使用匿名函数。还有另一种方法吗?

3 个答案:

答案 0 :(得分:2)

你需要在$reviews_contents这样的reference中传递变量use

function(Symfony\Component\DomCrawler\Crawler $node, $i) use (&$reviews_contents)

答案 1 :(得分:2)

因为匿名函数中的use按值而不是按引用传递变量。你想要一个引用,这样你就可以修改变量,并在调用函数后保持这些修改。

function (Symfony\Component\DomCrawler\Crawler $node, $i) use (&$reviews_contents) {
   // modifications to `$reviews_contents` will stick around because it's now
   // a reference, not passed by value
}

答案 2 :(得分:1)

尝试放置&在$ reviews_contents之前,如下所示获取对该变量的引用...

use (&$reviews_contents)