Je suis en train de développer un grattoir Web pour Android Play Store en PHP et j'ai quelques problèmes. C'est la fonction que j'utilise pour obtenir les commentaires de l'application:
function reviews($url_to_crawl , $crawler) {
$reviews_contents = array();
if (num_reviews($url_to_crawl, $crawler)) {
$crawler->filter(".review-body")->each(function(SymfonyComponentDomCrawlerCrawler $node, $i) use ($reviews_contents) {
$reviews_contents[$i] = trim($node->text());
});
}
return $reviews_contents;
}
à présent $reviews_contents
est vide, je suppose parce que j'utilise une fonction anonyme. Y a-t-il une autre façon de faire cela?
Réponses:
2 pour la réponse № 1Vous devez passer la variable $reviews_contents
par référence dans le use
comme ça
function(SymfonyComponentDomCrawlerCrawler $node, $i) use (&$reviews_contents)
2 pour la réponse № 2
Car use
dans les fonctions anonymes, transmet les variables par valeur plutôt que par référence. Vous voulez une référence pour pouvoir modifier la variable et conserver ces modifications après l'appel de la fonction.
function (SymfonyComponentDomCrawlerCrawler $node, $i) use (&$reviews_contents) {
// modifications to `$reviews_contents` will stick around because it"s now
// a reference, not passed by value
}
1 pour la réponse № 3
Essayez de mettre & before $ reviews_contents comme ci-dessous pour obtenir une référence à cette variable ...
use (&$reviews_contents)