## Fonctions variables

PHP supporte le concept de fonctions variables. Cela signifie que si le nom d'une variable est suivi de parenthèses, PHP recherchera une fonction de même nom et essaiera de l'exécuter. Cela peut servir, entre autres, pour faire des fonctions de rappel, des tables de fonctions...

Les fonctions variables ne peuvent pas fonctionner avec les éléments de langage comme les echo, print, unset(), isset(), empty(), include, require etc. Il est nécessaire d'utiliser une gestion de fonctions personnalisée pour utiliser un de ces éléments de langage comme fonctions variables.

Exemple #1 Exemple de fonction variable

    <?php
    function foo() {
        echo "dans foo()\n";
    }

    function bar($arg = '')
    {
        echo "Dans bar(); l'argument était '$arg'.\n";
    }

    // Ceci est une fonction détournée de echo
    function echoit($string)
    {
        echo $string;
    }

    $func = 'foo';
    $func();        // Appel foo()

    $func = 'bar';
    $func('test');  // Appel bar()

    $func = 'echoit';
    $func('test');  // Appel echoit()

Il est aussi possible d'appeler les méthodes d'un objet en utilisant le système des fonctions variables.

Exemple #2 Exemple de méthode variable

    <?php
    class Foo
    {
        function Variable()
        {
            $name = 'Bar';
            $this->$name(); // Appelle la méthode Bar()
        }

        function Bar()
        {
            echo "C'est Bar";
        }
    }

    $foo = new Foo();
    $funcname = "Variable";
    $foo->$funcname();  // Appelle $foo->Variable()

Lors de l'appel à des méthodes statiques, l'appel de fonction est meilleur que l'opérateur de propriété statique :

Exemple #3 Exemple de méthode variable avec des propriétés statiques

    <?php
    class Foo
    {
        static $variable = 'static property';
        static function Variable()
        {
            echo "Method Variable called\n";
        }
    }

    echo Foo::$variable ."\n"; // Ceci affiche 'static property'. Il est nécessaire d'avoir une $variable dans le contexte.
    $variable = "Variable";
    Foo::$variable();  // Ceci appelle $foo->Variable(), lisant ainsi la $variable depuis le contexte.

L'exemple ci-dessus va afficher :

    static property
    Method Variable called

Exemple #4 callables complexes

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

    $func = array("Foo", "bar");
    $func(); // Affiche "bar"
    $func = array(new Foo, "baz");
    $func(); // Affiche "baz"
    $func = "Foo::bar";
    $func(); // Affiche "bar"

### Voir aussi

- is_callable()
- call_user_func()
- function_exists()
- Les variables variable

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open