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 回答