在回调函数中使用全局变量的替代方法是什么?

时间:2013-02-02 13:46:26

标签: php callback global-variables

我已经使用了很长时间的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(如果有的话)的替代方法是什么?

2 个答案:

答案 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代替全局变量。它必须工作