call_user_func
(PHP 4, PHP 5, PHP 7)
call_user_func — Aufruf der Callback-Funktion die als erster Parameter übergeben wurde
Beschreibung
Ruft die Funktion Callback
die als erster Parameter übergeben
wurde auf und über gibt dieser alle weiteren Parameter als Argumente.
Parameter-Liste
-
callback
-
Das aufzurufende callable.
-
...
-
Null oder mehr Parameter, die an die Callback-Funktion übergeben werden sollen
Hinweis:
Beachten Sie, dass die Parameter von call_user_func() nicht als Referenzen übergeben werden.
Beispiel #1 call_user_func()-Beispiel und Referenzen
<?php
error_reporting(E_ALL);
function increment(&$var)
{
$var++;
}
$a = 0;
call_user_func('increment', $a);
echo $a."\n";
// Stattdessen kann dies verwendet werden
call_user_func_array('increment', array(&$a));
echo $a."\n";
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Warning: Parameter 1 to increment() expected to be a reference, value given in … 0 1
Changelog
Version | Beschreibung |
---|---|
5.3.0 |
Die Interpretation von objektorientierten Schlüsselwörtern wie
parent oder self hat sich geändert.
In früheren Versionen hat ein Aufruf davon mit einem Doppel-Doppelpunkt
eine Warnung der Stufe E_STRICT hervorgerufen, weil
diese als statisch interpretiert wurden.
|
5.3.0 |
Erwartet die aufgerufene Funktion einen per Referenz zu übergebenden Parameter,
wird nun ein E_WARNUNG erzeugt.
|
Beispiele
Beispiel #2 call_user_func()-Beispiel
<?php
function friseur($type)
{
echo "Sie möchten einen $type-Kopf, kein Problem\n";
}
call_user_func('friseur', "Bubi");
call_user_func('friseur', "Pilz");
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Sie möchten einen Bubi-Kopf, kein Problem Sie möchten einen Pilz-Kopf, kein Problem
Beispiel #3 call_user_func() mit Namespacenamen
<?php
namespace Foobar;
class Foo {
static public function test() {
print "Hello world!\n";
}
}
call_user_func(__NAMESPACE__ .'\Foo::test'); // Seit PHP 5.3.0
call_user_func(array(__NAMESPACE__ .'\Foo', 'test')); // Seit PHP 5.3.0
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Hello world! Hello world!
Beispiel #4 Verwenden einer Klassenmethode mit call_user_func()
<?php
class myclass {
static function say_hello()
{
echo "Hello!\n";
}
}
$classname = "myclass";
call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello'); // Seit 5.2.3
$myobject = new myclass();
call_user_func(array($myobject, 'say_hello'));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Hello! Hello! Hello!
Beispiel #5 Verwendung von Lambdafunktionen mit call_user_func()
<?php
call_user_func(function($arg) { print "[$arg]\n"; }, 'test'); /* Seit PHP 5.3.0 */
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
[test]
Anmerkungen
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.
Siehe auch
- call_user_func_array() - Call a callback with an array of parameters
- is_callable() - Prüft ob der Inhalt einer Variable als Funktion aufgerufen werden kann
- Informationen über den Callback-Typ
- ReflectionFunction::invoke() - Invokes function
- ReflectionMethod::invoke() - Invoke
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-function.call-user-func.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.