usort() in Klasse
dave
- php
Hallo,
ich habe folgendes Problem:
Eine Methode einer Klasse verwendet die usort-Methode. Als Vergleichsfunktion soll eine Methode der Klasse übergeben werden.
Leider erhalte ich die Fehlermeldung, dass die Vergleichsfunktion ungültig ist.
//php
class Test {
function sort($method){
if ($method=='name') usort($_SESSION['data'],'dateSorting');
}
function dateSorting($a, $b){
return strcmp($a['name'], $b['name']);
}
}
Vielen Dank für eure Hilfe
Eine Methode einer Klasse verwendet die usort-Methode. Als Vergleichsfunktion soll eine Methode der Klasse übergeben werden.
Leider erhalte ich die Fehlermeldung, dass die Vergleichsfunktion ungültig ist.
Der Parameter, der den Funktionsnamen der Vergleichsfunktion entgegennimmt, ist vom Typ "callback" (vgl. PHP-Manual).
Ein Parameter vom Typ Callback kann zwei Arten von Werten entgegennehmen:
1. Einen String mit einem globalen Funktionsnamen.
2. Ein Array mit zwei Werten. Wert 1 ist eine Klassenvariable, Wert 2 ist ein String mit einem Methodennamen in dieser Klasse.
Das bedeutet für deinen Anwendungsfall: Du willst die Methode 'dateSorting' in der Klasse $this aufrufen, also mußt du als Parameter nicht den String 'dateSorting' übergeben (das wäre nur möglich, wenn die Sortierfunktion außerhalb der Klasse definiert worden wäre), sondern du mußt ein Array übergeben:
Falsch:
usort($_SESSION['data'],'dateSorting')
Richtig:
usort($_SESSION['data'],array($this,'dateSorting'));
Wie gesagt: Diese Vorgehensweise ist gültig für alles, was einen Parameter vom Typ Callback erwartet, nicht nur für die Sortierfunktionen.
Richtig:
usort($_SESSION['data'],array($this,'dateSorting'));
Vielen Dank, auf das wäre ich nie gekommen.