## Функции переменных

PHP поддерживает концепцию функций переменных. Это означает, что если к имени переменной присоединили круглые скобки, PHP ищет функцию с тем же именем, что и результат вычисления переменной, и пробует выполнить функцию. Этим синтаксисом описывают callback-функции, таблицы функций и т. д.

Функции переменных не работают с языковыми конструкциями echo, print, unset(), isset(), empty(), include, require и т. п. Напишите функцию-обёртку, чтобы эти конструкции работали как функции переменных.

Пример #1 Пример функции переменной

    <?php

    function foo() {
        echo "В foo()\n";
    }

    function bar($arg = '')
    {
        echo "В bar(); аргумент был '$arg'.\n";
    }

    // Функция-обёртка для echo
    function echoit($string)
    {
        echo $string;
    }

    $func = 'foo';
    $func();        // Вызывает функцию foo()

    $func = 'bar';
    $func('test');  // Вызывает функцию bar()

    $func = 'echoit';
    $func('test');  // Вызывает функцию echoit()

Синтаксис функций переменных работает также для вызова методов объектов.

Пример #2 Пример метода переменной

    <?php

    class Foo
    {
        function Variable()
        {
            $name = 'Bar';
            $this->$name(); // Вызывает метод Bar()
        }

        function Bar()
        {
            echo "Это Bar";
        }
    }

    $foo = new Foo();
    $funcname = "Variable";
    $foo->$funcname();  // Вызывает $foo->Variable()

При вызове статических методов вызов функции «сильнее», чем оператор доступа к статическому свойству:

Пример #3 Пример вызова метода переменной со статическим свойством

    <?php

    class Foo
    {
        static $variable = 'статическое свойство';

        static function Variable()
        {
            echo "Вызов метода Variable\n";
        }
    }

    echo Foo::$variable ."\n"; // Это выведет «статическое свойство». В области видимости класса нужна переменная $variable
    $variable = "Variable";
    Foo::$variable();  // Вызывает $foo->Variable() после прочтения переменной $variable в текущей области видимости

Результат выполнения приведённого примера:

    статическое свойство
    Вызов метода Variable

Пример #4 Сложные callable-функции

    <?php

    class Foo
    {
        static function bar()
        {
            echo "bar\n";
        }

        function baz()
        {
            echo "baz\n";
        }
    }

    $func = array("Foo", "bar");
    $func(); // Выведет "bar"
    $func = array(new Foo(), "baz");
    $func(); // Выведет "baz"
    $func = "Foo::bar";
    $func(); // Выведет "bar"

### Смотрите также

- is_callable()
- call_user_func()
- function_exists()
- Переменные переменных

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