2

オブジェクトの配列を共通のプロパティで並べ替えようとしていますが、 $property パラメータを内部関数に登録できません (外部関数で使用できます)。

私がドキュメントを読んだ方法では、パラメーターが使用可能になるように聞こえましたが、何か誤解していましたか?

ここに私が持っているものがあります:

public static function sortObjectsByProperty($objects, $property)  
  {     
        function compare_object($a, $b) 
        {   
            $a = $a->$property;
            $b = $b->$property;

            if ($a->$property == $b->$property)
            {
                return 0;
            }      

            return ($a->$property > $b->$property) ? +1 : -1;        
        }

        usort($objects, 'compare_object');
        return $objects;
  }

アドバイスをいただければ幸いです。ありがとう。

4

2 に答える 2

7

残念ながら、これは php では機能しません。ネストされたスコープはなく、各関数には独自のローカル スコープがあります。それに加えて、宣言されている場所に関係なく、すべての関数はグローバルであり、一度しか宣言できないため、sortObjectsByProperty が複数回呼び出されるとエラー メッセージが表示されます。

php5.3 では、たとえばラムダを使用してこれを回避できます。

function sortObjectsByProperty($objects, $property)  
{     
        $compare_object = function($a, $b) use($property)
        {   
            $a = $a->$property;
            $b = $b->$property;

            if ($a->$property == $b->$property)
            {
                return 0;
            }      

            return ($a->$property > $b->$property) ? +1 : -1;        
        };

        usort($objects, $compare_object);
        return $objects;
  }
于 2010-04-27T15:59:57.777 に答える
-1

そのような関数を PHP に埋め込むことはできません。ただし、できることは、プライベートな静的関数を利用することです。

class myClass {
  private static function compare_object($a, $b) {
    // do stuff
  }
  public function sortObjectsByProperty($objects, $property) {
    $a = new a();
    $b = new b();
    self::compare_object($a, $b);
  }
}
于 2010-04-27T16:01:06.653 に答える