我已经使用了很长时间的PHP,但直到最近才真正使用回调。在下面的代码中,回调(例如QueryPath,如果你想知道,但它可能是接受回调的任何东西)将添加一些链接到数组:
// parse any product links out of the html
$aProducts = array();
qp( $html, 'a' )->each(function($index, $element){
global $aProducts;
$link = qp($element)->attr('href');
$pregMatch = preg_match('@(.*)-p-(.*)\.html@i', $link, $matches);
if( $pregMatch ) {
$product_id = (int)$matches[2];
if( !in_array($product_id, $aProducts) ) {
$aProducts[] = $product_id;
}
}
});
// print out our product array
print_r( $aProducts );
使用global $aProducts
(如果有的话)的替代方法是什么?
答案 0 :(得分:3)
使用use
:
qp( $html, 'a' )->each(function($index, $element) use(&$aProducts) {
请注意&
。这是必需的,否则你将使用数组的副本。您还可以使用乘以值,只需将它们列为,
。例如:use(&$aProducts, $someObj, &$someInt)
PHP.net:http://www.php.net/manual/en/language.namespaces.importing.php
答案 1 :(得分:0)
我建议您不要使用全局变量,而是将代码放在Class上,并使用$ this代替全局变量。它必须工作