从该方法的子函数中引用方法参数变量似乎不起作用,即使指定了全局变量。
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');
}甚至可以从子函数中引用方法参数吗?如果是这样..。多么?
对于上面的具体示例,我意识到我可以使用闭包来实现相同的目标,但我不希望脚本依赖于PHP5.3。
发布于 2011-02-11 04:27:51
你为什么不能让它静止不动?
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');
}
}发布于 2011-02-11 04:08:01
您似乎已经在PHP5.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'));
}
}发布于 2011-02-11 04:33:47
另一个选项是匿名函数:
public function sortArray(&$array, $keyToCompare){
return uasort($array, function($pairA, $pairB) uses ($keyToCompare) {
return strcmp($pairA[$keyToCompare], $pairB[$keyToCompare]);
});
}未经测试,在火车上:D,但请参阅文献资料获得更多信息。
FYI,引用传递是不必要的,因为您不修改数组。PHP不会复制,因此不存在按值传递的内存问题。
https://stackoverflow.com/questions/4965468
复制相似问题