2012-10-12 132 views
1

爲了努力在PHP中使用OOP,我一直在尋找一種方法來定義用於排序的對象中的函數。在Java中這很簡單,因爲compareTo()被排序後的數組等自動調用。我環顧了PHP.net,並且在PHP中找不到類似的東西。我已經採取了對我來說似乎是破解的方式,所以我想知道是否有人能夠以更簡單的方式提供一些見解。PHP:compareTo類似於Java

當前代碼:

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這樣做的一個更容易/更圓滑的方式嗎?

+0

好問題。我不相信你可以在PHP中使用自己的比較運算符函數定義,但是我希望看到有人能夠明確地發佈一個答案。 – Brad

+1

一般來說,答案是「在PHP中這樣做的好方法嗎?」沒有。」 –

回答

1

您可以直接使用匿名函數。

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

我不認爲你可以在PHP中做到這一點,但我很樂意被證明是錯誤的。我通常使用靜態方法爲數組,字符串,數字等等提供一系列實用程序類的包,但只有在定義PHP尚未具備的函數時纔有用,因爲否則您只會爲本機函數製作無意義的包裝。