2012-10-12 135 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尚未具备的函数时才有用,因为否则您只会为本机函数制作无意义的包装。