1

PHP で OOP を利用するために、ソートに使用する関数をオブジェクト内に定義する方法を探していました。Java では、compareTo()ソートされた配列などによって が自動的に呼び出されるため、これは簡単です。私はPHP.netを見回しましたが、PHPに似たものは見つかりませんでした。私にはハックのように見えるものに頼ったので、誰かがより簡単な方法で洞察を提供できるかどうか疑問に思っています.

現在のコード:

class SomeObject {
    private $someField;

    function getSomeField() { return $this->someField; }

    function compareTo($other) {
        return $this->someField - $other->getSomeField();
    }
}

//in funcs.php
function objSort($a, $b) {
    return $a->compareTo($b);
}


//To sort an array
usort($array, objSort);

PHPでこれを行うためのより簡単で洗練された方法はありますか?

4

2 に答える 2

2

匿名関数を直接使用できます。

class SomeObject {
    private $someField;
    function getSomeField() { return $this->someField; }
}

usort($array, function($a, $b) {
    return $a->getSomeField() - $b->getSomeField();
});

または、比較する静的関数の使用を定義することもできます。

class SomeObject {
    private $someField;

    function getSomeField() { return $this->someField; }

    static function compare($a, $b) {
        return $a->getSomeField() - $b->getSomeField();
    }
}

usort($array, array('SomeObject', 'compare'));
于 2012-10-12T16:31:19.437 に答える
0

PHPでこれを行うことはできないと思いますが、間違っていることを証明したいと思います. 私は通常、静的メソッドを使用して配列、文字列、数値などのユーティリティ クラスのパッケージを持っていますが、PHP がまだ持っていない関数を定義する場合にのみ役立ちます。

于 2012-10-12T16:43:30.823 に答える