2011-02-11 4 views
0

전역이 지정된 경우에도 해당 메소드의 하위 함수 내에서 메소드 매개 변수 변수를 참조하는 것이 작동하지 않는 것처럼 보입니다.하위 함수 내의 메소드 변수의 가용성

하위 함수 내에서 메소드 매개 변수를 참조 할 수 있습니까? 그렇다면 ... 어떻게?

위의 구체적인 예를 보려면 동일한 목표를 달성하기 위해 클로저를 사용할 수 있지만 스크립트가 PHP 5.3에 종속되지 않도록하는 것이 좋습니다.

+0

PHP 그런 범위 지정을 지원하지 않습니다. 그것만큼 간단합니다 ... – ircmaxell

+0

왜 함수를 중첩해야합니까? – zerkms

+0

그렇지 않습니까? 아! 어떻게해야합니까? uasort 함수와 함께 사용할 수 있도록 중첩 함수를 정의하면됩니다. –

답변

1

정적으로 설정할 수없는 이유는 무엇입니까?

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'); 
    } 
} 
+0

으로 마이그레이션을 시작해야합니다. 많은 감사합니다, 그것은 가장 우아한 아니지만 잘 작동합니다 (나처럼 조금) –

+0

내 원래 응답이 해키라고 언급 했어 :) – jmathai

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')); 
    } 

} 
0

또 다른 옵션은 익명 함수 D하지만, 추가 정보를 원하시면 the documentation을 참조하십시오.

참고로 참조를 통한 전달은 필요하지 않습니다. 배열을 수정하지 않으므로 PHP는 복사본을 만들지 않으므로 값으로 전달하는 메모리 문제가 없습니다.

+0

나는 PHP 5.2.17에 익명의 funcs가 작동하지 않는 것; 그것은 훨씬 더 아름답 지요. 기차를 타보세요. –