Callbacks / Callables
Callbacks können seit PHP 5.4 mit dem Type-Hint callable gekennzeichnet werden. Diese Dokumentation verwendete auch die Typinformation callback für diesen Zweck.
Einige Funktionen wie call_user_func() oder usort() akzeptieren eine benutzerdefinierte Callback-Funktion als Argument. Fallback-Funktionen können nicht nur einfache Funktionen sein, sondern auch Methoden eines Objects, inklusive statischer Klassenmethoden.
Übergabe
Eine PHP-Funktion wird anhand ihres Namens als String übergeben. Jede eingebaute oder benutzerdefinierte Funktion kann verwendet werden, außer Sprachekonstrukten wie: array(), echo, empty(), eval(), exit(), isset(), list(), print oder unset().
Eine Methode eines instantiierten Objects wird übergeben als Array mit dem Object an Index-Position 0 und dem Methodennamen an Position 1. Der Zugriff auf als protected oder private markierte Methoden von innerhalb der Klasse ist erlaubt.
Statische Klassenmethoden können auch übergeben werden, ohne dann ein Object dieser Klasse instantiiert werden muss, indem man den Namen der Klasse statt eines Objects an Index 0 übergibt. Seit PHP 5.2.3 kann man auch 'ClassName::methodName' übergeben.
Neben den üblichen benutzerdefiniersten Funktionen können auch anonyme Funktionen als Callback-Agumente übergeben werden.
Beispiel #1 Beisviele für Ballback-Funktionen
<?php
// Eine Beispiel-Callback-Funktion
function my_callback_function() {
echo 'hello world!';
}
// Eine Beispiel-Callback-Methode
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Typ 1: Einfaches Callback
call_user_func('my_callback_function');
// Typ 2: Statischer Methodenaufruf
call_user_func(array('MyClass', 'myCallbackMethod'));
// Typ 3: Aufruf einer Objektmethode
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Typ 4: Statischer Methodenaufruf (Seit PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Typ 5: Relativer statischer Methodenaufruf (Seit PHP 5.3.0)
class A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
// Typ 6: Objekte die __invoke implementieren können als Callable verwendet werden (seit PHP 5.3)
class C {
public function __invoke($name) {
echo 'Hello ', $name, "\n";
}
}
$c = new C();
call_user_func($c, 'PHP!');
?>
Beispiel #2 Fallback-Beispiel mit einem Closure
<?php
// Unser Closure
$double = function($a) {
return $a * 2;
};
// Dies ist unsere Menge an Zahlen
$numbers = range(1, 5);
// Hier verwenden wir das Callback, um
// den Wert jedes Elements in unserer
// Menge zu verdoppeln
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
2 4 6 8 10
Hinweis:
Callbacks, die für Funktionen wie call_user_func() und call_user_func_array() registriert sind, werden nicht mehr ausgeführt, wenn in einem vorherigen Callback eine Exception geworfen und nicht gefangen wurde.
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-language.types.callable.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.