您可以在 DownTime 类上定义 compare() 方法:
class DownTime {
public $total, $longest, $count;
public static function compare(DownTime $a, DownTime $b) {
// compare $a and $b here, and return -1, 0, 1
}
}
然后像这样使用uasort:
uasort($array, 'DownTime::compare')
PHP 中没有这样的“Comparable”接口,但是在 useland 中实现它会很简单:
interface Comparable {
function compareTo($a);
}
// a generic compare function
function compare($a, $b) {
if ($a instanceof Comparable) return $a->compareTo($b);
if ($a < $b) return -1;
if ($a > $b) return 1;
return 0;
}
// now you can sort without knowing anything about what the array contains:
uasort($array, 'compare');
如果您希望能够使用 ArrayObject 透明地执行此操作:
class SortableArrayObject extends ArrayObject
{
function asort() {
return $this->uasort('compare'); // you can even make compare() a member of
// SortableArrayObject and use
// $this->uasort(array($this,'compare'))
}
}
$arrayObject->asort();
这里容器对被容器一无所知,从 OOP 的角度来看这更好。