PHP.nl

Variable functions

Variabele functies

PHP ondersteunt het concept van variabele functies. Dit betekent dat als een variabele naam haakjes eraan heeft toegevoegd, PHP zal zoeken naar een functie met dezelfde naam als wat de variabele evalueert, en zal proberen deze uit te voeren. Onder andere dingen kan dit worden gebruikt om callbacks, functietabellen, enzovoort te implementeren.

Variabele functies werken niet met taalconstructies zoals echo, print, unset, isset, empty, include, require en dergelijke. Gebruik wrapperfuncties om gebruik te maken van een van deze constructies als variabele functies.

Voorbeeld: Voorbeeld van een variabele functie

<?php
function foo() {
    echo "In foo()<br />\n";
}

function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}

// Dit is een wrapperfunctie rond echo
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // Dit roept foo() aan

$func = 'bar';
$func('test');  // Dit roept bar() aan

$func = 'echoit';
$func('test');  // Dit roept echoit() aan
?>

Objectmethoden kunnen ook worden aangeroepen met de syntaxis van variabele functies.

Voorbeeld: Voorbeeld van een variabele methode

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // Dit roept de Bar() methode aan
    }
    
    function Bar()
    {
        echo "Dit is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // Dit roept $foo->Variable() aan

?>

Bij het aanroepen van statische methoden is de functieaanroep sterker dan de statische eigenschap operator:

Voorbeeld: Voorbeeld van een variabele methode met statische eigenschappen

<?php
class Foo
{
    static $variable = 'statische eigenschap';
    static function Variable()
    {
        echo 'Methode Variable aangeroepen';
    }
}

echo Foo::$variable; // Dit print 'statische eigenschap'. Het heeft een $variable in deze scope nodig.
$variable = "Variable";
Foo::$variable();  // Dit roept $foo->Variable() aan, waarbij $variable in deze scope wordt gelezen.

?>

Voorbeeld: Complexe aanroepbare functies

<?php
class Foo
{
    static function bar()
    {
        echo "bar\n";
    }
    function baz()
    {
        echo "baz\n";
    }
}

$func = array("Foo", "bar");
$func(); // print "bar"
$func = array(new Foo, "baz");
$func(); // print "baz"
$func = "Foo::bar";
$func(); // print "bar"
?>

is_callable``call_user_func``function_existsvariabele variabelen

Documentatie