2011-02-11 11 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で匿名機能は動作していないようです。それははるかに美しいだろう。電車で楽しく過ごしましょう。 –

関連する問題