即使指定了 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。
答案 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不会复制,因此没有内存问题通过值传递。