子函数中方法变量的可用性

时间:2011-02-11 03:52:47

标签: php class methods scope

即使指定了 global ,在该方法的子函数中引用方法参数变量似乎也不起作用。

public function sortArray(&$array, $keyToCompare){// BOOL sortArray( ARR &$array, STR $keyToCompare )
    function cmpVals($pairA, $pairB){
        global $keyToCompare;
        return strcmp($pairA[$keyToCompare], $pairB[$keyToCompare]);
    }
    return uasort($array, 'cmpVals');
}

甚至可以从子函数中引用方法参数吗?如果是这样......怎么样?

对于我上面的具体示例,我意识到我可以使用闭包来实现相同的目标,但我不希望脚本依赖于PHP 5.3。

3 个答案:

答案 0 :(得分:1)

您似乎已经在PHP 5.3中使用OOP了。还可以创建一个分拣机类吗?

class Sorter{

    private $key;

    function __construct($key){
        $this->key = $key;
    }

    private function compare($a, $b){
        return strcmp($a[$this->key], $b[$this->key]);
    }

    public function sort($a){
        uasort($a, array($this, 'compare'));
    }

}

答案 1 :(得分:1)

你有什么理由不能让它静止吗?

class YourClassName {
    public static $keyToCompare;
    public function sortArray(&$array, $keyToCompare){// BOOL sortArray( ARR &$array, STR $keyToCompare )
        self::$keyToCompare = $keyToCompare;
        function cmpVals($pairA, $pairB){
            $keyToCompare = YourClassName::$keyToCompare;
            return strcmp($pairA[$keyToCompare], $pairB[$keyToCompare]);
        }
        return uasort($array, 'cmpVals');
    }
}

答案 2 :(得分:0)

另一个选项是匿名函数:

public function sortArray(&$array, $keyToCompare){
    return uasort($array, function($pairA, $pairB) uses ($keyToCompare) {
        return strcmp($pairA[$keyToCompare], $pairB[$keyToCompare]);
    });
}

未经测试,在火车上:D,但请参阅the documentation以获取更多信息。

仅供参考,由于您不修改数组,因此不需要通过引用传递.PHP不会复制,因此没有内存问题通过值传递。