전역이 지정된 경우에도 해당 메소드의 하위 함수 내에서 메소드 매개 변수 변수를 참조하는 것이 작동하지 않는 것처럼 보입니다.하위 함수 내의 메소드 변수의 가용성
하위 함수 내에서 메소드 매개 변수를 참조 할 수 있습니까? 그렇다면 ... 어떻게?
위의 구체적인 예를 보려면 동일한 목표를 달성하기 위해 클로저를 사용할 수 있지만 스크립트가 PHP 5.3에 종속되지 않도록하는 것이 좋습니다.
전역이 지정된 경우에도 해당 메소드의 하위 함수 내에서 메소드 매개 변수 변수를 참조하는 것이 작동하지 않는 것처럼 보입니다.하위 함수 내의 메소드 변수의 가용성
하위 함수 내에서 메소드 매개 변수를 참조 할 수 있습니까? 그렇다면 ... 어떻게?
위의 구체적인 예를 보려면 동일한 목표를 달성하기 위해 클로저를 사용할 수 있지만 스크립트가 PHP 5.3에 종속되지 않도록하는 것이 좋습니다.
정적으로 설정할 수없는 이유는 무엇입니까?
public function sortArray(&$array, $keyToCompare){
return uasort($array, function($pairA, $pairB) uses ($keyToCompare) {
return strcmp($pairA[$keyToCompare], $pairB[$keyToCompare]);
});
}
테스트되지 않은, 기차 :
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');
}
}
으로 마이그레이션을 시작해야합니다. 많은 감사합니다, 그것은 가장 우아한 아니지만 잘 작동합니다 (나처럼 조금) –
내 원래 응답이 해키라고 언급 했어 :) – jmathai
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'));
}
}
또 다른 옵션은 익명 함수 D하지만, 추가 정보를 원하시면 the documentation을 참조하십시오.
참고로 참조를 통한 전달은 필요하지 않습니다. 배열을 수정하지 않으므로 PHP는 복사본을 만들지 않으므로 값으로 전달하는 메모리 문제가 없습니다.
나는 PHP 5.2.17에 익명의 funcs가 작동하지 않는 것; 그것은 훨씬 더 아름답 지요. 기차를 타보세요. –
PHP 그런 범위 지정을 지원하지 않습니다. 그것만큼 간단합니다 ... – ircmaxell
왜 함수를 중첩해야합니까? – zerkms
그렇지 않습니까? 아! 어떻게해야합니까? uasort 함수와 함께 사용할 수 있도록 중첩 함수를 정의하면됩니다. –