incluso se puede construir el comportamiento de la clasificación en la clase que estés clasificación, si quiere ese nivel de control
class thingy
{
public $prop1;
public $prop2;
static $sortKey;
public function __construct($prop1, $prop2)
{
$this->prop1 = $prop1;
$this->prop2 = $prop2;
}
public static function sorter($a, $b)
{
return strcasecmp($a->{self::$sortKey}, $b->{self::$sortKey});
}
public static function sortByProp(&$collection, $prop)
{
self::$sortKey = $prop;
usort($collection, array(__CLASS__, 'sorter'));
}
}
$thingies = array(
new thingy('red', 'blue')
, new thingy('apple', 'orange')
, new thingy('black', 'white')
, new thingy('democrat', 'republican')
);
print_r($thingies);
thingy::sortByProp($thingies, 'prop1');
print_r($thingies);
thingy::sortByProp($thingies, 'prop2');
print_r($thingies);
Ese tercer ejemplo es básicamente diciendo: "Lo siento no hay manera estándar para que un objeto tener un comparador, simplemente escriba una función estática 'cmp_obj' en el objeto, y recuerde llamar a la orden de servicio con esa función." De acuerdo, excepto que cmp_obj no tiene un significado especial en PHP. Quizás eso sería útil si PHP tuviera algo así como la función '__cmp__' de Python como estándar, o la interfaz' implementa Comparable' de Java para que pueda ordenar y usar '<', '>', comparadores sin profundizar en la implementación de esa clase que quiera que sea el género. Desafortunadamente, parece que esto tampoco está cambiando en PHP7. – NoBugs
Ahora, eso haría que PHP fuera sensato y usable, no puede tener eso, ¿verdad? :) –
No, no podemos, pero realmente necesitamos otra forma de expresar la misma expresión en PHP7 aunque https://wiki.php.net/rfc/combined-comparison-operator – NoBugs