ok utiliser usort avec une fonction n'est pas si compliqué
C'est ce que j'avais auparavant dans mon code linéaire
function merchantSort($a,$b){
return ....// stuff;
}
$array = array('..','..','..');
pour trier je fais simplement
usort($array,"merchantSort");
Nous mettons maintenant à jour le code, supprimons toutes les fonctions globales et les mettons à leur place. Maintenant, tout le code est dans une classe et je ne peux pas comprendre comment utiliser la fonction usort pour trier le tableau avec le paramètre qui est une méthode objet au lieu d'une simple fonction
class ClassName {
...
private function merchantSort($a,$b) {
return ...// the sort
}
public function doSomeWork() {
...
$array = $this->someThingThatReturnAnArray();
usort($array,'$this->merchantSort'); // ??? this is the part i can't figure out
...
}
}
La question est de savoir comment appeler une méthode objet dans la fonction usort ()
$this
(neato).usort($array, 'ClassName:merchantSort')
, n'est-ce pas?'self::merchantSort'
et elle fonctionne.$value_compare_func
estcallable
array($this, 'merchantSort')
la source
Vous devez réussir
$this
par exemple:usort( $myArray, array( $this, 'mySort' ) );
Exemple complet:
la source
Dans cet exemple, je trie par un champ à l'intérieur du tableau appelé AverageVote.
Vous pouvez inclure la méthode dans l'appel, ce qui signifie que vous n'avez plus le problème de portée de classe, comme ceci ...
la source
Dans la classe de modèle Laravel (5.6), je l'ai appelé comme ça, les deux méthodes sont publiques statiques, utilisant php 7.2 sur Windows 64 bits.
J'ai appelé usortCalledFrom () comme ça
Aucun de ceux-ci n'était du travail
la source
static::
au lieu du nom de la classe, c'est ce dont j'avais besoin, merci de l'avoir mentionné.