Variablenfunktionen
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.