Cytat(andrzej7322 @ 29.01.2011, 15:39:40 )

na powyższym przykładzie mamy w cmp() uzyte zmienne $a oraz $b.Gdzie je inicjujemy ?
Nigdzie ich nie inicjujesz. Są one przekazywane automatycznie do funkcji zwrotnej (tzw.
callback) w kodzie funkcji usort.
Hmm, spróbuje to pokazać na przykładzie przykładowej funkcji która wykorzystuje callback:
function concatReverse($a, $b)
{
return $b . $a;
}
function myFunctionWithCallback($callbackName)
{
$first = 'Foo';
$second = 'Bar';
return $callbackName($first, $second);
}
echo myFunctionWithCallbackUser
('concatReverse');
Najpierw definiuję funkcję, której użyję jako callbacka, a później funkcję, która z niego skorzysta. Do funkcji
myFunctionWithCallback przekazuję
nazwę funkcji którą chcę odpalić. Jak widzisz, w ramach funkcji
myFunctionWithCallback to ja decyduję w jakiej kolejności przekazać parametry - mogą one pochodzić ze zmiennych jak w tym wypadku (first, second), albo być przekazane normalnie:
return $callbackName('Foo', 'Bar');
O to chodzi, że callbacka, tak jak normalnej funkcji (którą to callback jest!) nie interesuje skąd się wzięły parametry - to Twoim zdaniem jest je do niej przekazać.
W przypadku usort zrobili to za Ciebie twórcy PHP.
Callbacki są bardzo często spotykane w języku JavaScript, tak więc tam możesz szukać zasady działania.
BTW. Od PHP 5.3 można przekazywać funkcje jako parametry, dzięki wprowadzeniu funkcji anonimowych - wtedy kod usort który podałeś mógłby wyglądać tak:
$a = array(3
, 2
, 5
, 6
, 1
);
usort($a, function ($a, $b) { if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
});