PHP unterstützt das Konzept der Variablenfunktionen. Wenn Sie an das Ende einer Variablen Klammern hängen, versucht PHP eine Funktion aufzurufen, deren Name der aktuelle Wert der Variablen ist. Dies kann unter anderem für Callbacks, Funktionstabellen, usw. genutzt werden.
Variablenfunktionen funktionieren nicht mit Sprachkonstrukten wie echo, print, unset(), isset(), empty(), include und require. Sie müssen Ihre eigenen Wrapperfunktionen verwenden, um diese Konstrukte als Variablenfunktionen benutzen zu können.
Beispiel #1 Beispiel für Variablenfunktionen
<?php
function foo()
{
echo "In foo()<br />\n";
}
function bar($arg = '')
{
echo "In bar(); der Parameter ist '$arg'.<br />\n";
}
// Dies ist eine Wrapperfunkiton für echo
function echoit($string)
{
echo $string;
}
$func = 'foo';
$func(); // Dies ruft foo() auf
$func = 'bar';
$func('test'); // Dies ruft bar() auf
$func = 'echoit';
$func('test'); // Dies ruft echoit() auf
?>
Sie können auch die Methode eines Objektes mittels der variablen Funktionen aufrufen.
Beispiel #2 Variable Methode
<?php
class Foo
{
function Variable()
{
$name = 'Bar';
$this->$name(); // Dies ruft die Bar() Methode auf
}
function Bar()
{
echo "Das ist Bar";
}
}
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname(); // Dies ruft $foo->Variable() auf
?>
Werden statische Methoden aufgerufen, ist der Funktionsaufruf stärker als der statische Eigenschaftsoperator:
Beispiel #3 Beispiel für variable Methoden mit statischen Eigenschaften
<?php
class Foo
{
static $variable = 'statische Eigenschaft';
static function Variable()
{
echo 'Method Variable called';
}
}
echo Foo::$variable; // Dies gibt 'statische Eigenschaft' aus. Es bräuchte eine $variable im aktuellen Geltungsbereich.
$variable = "Variable";
Foo::$variable(); // Dies ruft $foo->Variable() auf, da $variable im aktuellen Geltungbereich vorliegt.
?>
Ab PHP 5.4.0 können beliebige Callabless, die in einer Variable gespeichert sind, aufgerufen werden.
Beispiel #4 Komplexe Callables
<?php
class Foo
{
static function bar()
{
echo "bar\n";
}
function baz()
{
echo "baz\n";
}
}
$func = array("Foo", "bar");
$func(); // gibt "bar" aus
$func = array(new Foo, "baz");
$func(); // gibt "baz" aus
$func = "Foo::bar";
$func(); // gibt ab PHP 7.0.0 "bar" aus; vorher wurde ein fataler Fehler ausgelöst
?>
Siehe auch is_callable(), call_user_func(), Variable Variablen und function_exists().
Version | Beschreibung |
---|---|
7.0.0 | 'Klassenname::Methodenname' ist als Variablenfunktion erlaubt. |
5.4.0 | Array, die gültige Callables sind, sind als Variablenfunktion erlaubt. |