Hello,
Oder ums in Worte zu fassen:
Eine Callback-Funktion ist eine Funktion, die einer anderen Funktion als Paramater übergeben wird. Diese wird dann mit entsprechenden Paramtern aufgerufen.
Zum Beispiel preg_replace_callback, sucht nach einem Suchmuster, und ruft, dann die als Paramter angegebene Funktion auf. Diesem Funktionsaufruf werden als Paramter die Treffer übergeben.
Die Callback-Funktion kann dann damit weiterarbeiten und liefert letztendlich einen Wert zurück, der durch die Suche ersetzt wird...
Dann wäre die Callback-Funktion tatsächlich nur ein indirekter Aufruf. Indirekt deshalb, weil zur Laufzeit des Scriptes noch festgelegt werden kann, welche Funktion sich hinter dem Namen, der als Paramter übergeben wird, tatsächlich verbergen soll. Bei Interpretersprachen verschwimmen diese Genzen ohnehin. Man kann sie von außen nicht mehr sehen.
Unter einer Callback-Funktion versteht man aber gewöhnlich einen abgekoppelten Prozess, eine Funktion, die mit einer Aufgabe betraut, in einem eigenen Thread weiterläuft, ohne dadurch die aufrufende Stammfunktion zu behindern oder gar anzuhalten. Die Stammfunktion behält also die Programmkontrolle und spaltet einen Prozess ab, der die zugewiesene Aufgabe erledigen soll. Wenn dieser terminiert (also kurz vorher natürlich), ruft er seinerseits wieder seinen Auftraggeber auf und hält diesen an, um ihm das Ergebnis zu übergeben. Daher der Name "Call Back".
Die Abarbeitung ist somit asynchron. Ein einfacher indirekter Aufruf wäre aber synchron, weil das Stammprogramm die Kontrolle an die aufgerufene Funktion überträgt. Das ist unabhängig davon, wann die Funktion impelementiert oder instanziiert wird.
Ob dies in PHP tatsächlich bei "Callback-Funktionen" so ist, habe ich noch nicht nachgesehen. Ich vermute aber, dass hier nur der Wunsch der Vater der Namensgebung war, aber die Erfüllung dieses Wunsches noch in der Zukunft liegt.
Andere Sprachen können aber solches "Multithreading". Ich meine, Java gehört dazu.
Harzliche Grüße vom Berg und Frohe Weihnachtszeit
Tom
Nur selber lernen macht schlau
