Php переменная как имя функции

Php переменная как имя функции

Приведём пример синтаксиса, используемого для описания функций:

Пример #1 Псевдокод для демонстрации использования функций

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

Имена функций следуют тем же правилам, что и другие метки в PHP. Корректное имя функции начинается с буквы или знака подчёркивания, за которым следует любое количество букв, цифр или знаков подчёркивания. В качестве регулярного выражения оно может быть выражено так: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$ .

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

В случае, когда функция определяется в зависимости от какого-либо условия, например, как это показано в двух приведённых ниже примерах, обработка описания функции должна предшествовать её вызову.

Пример #2 Функции, зависящие от условий

/* Мы не можем вызвать функцию foo() в этом месте,
поскольку она ещё не определена, но мы можем
обратиться к bar() */

if ( $makefoo ) function foo ()
echo «Я не существую до тех пор, пока выполнение программы меня не достигнет.\n» ;
>
>

/* Теперь мы благополучно можем вызывать foo(),
поскольку $makefoo была интерпретирована как true */

function bar ()
echo «Я существую сразу с начала старта программы.\n» ;
>

Пример #3 Вложенные функции

function foo ()
function bar ()
echo «Я не существую пока не будет вызвана foo().\n» ;
>
>

/* Мы пока не можем обратиться к bar(),
поскольку она ещё не определена. */

/* Теперь мы можем вызвать функцию bar(),
обработка foo() сделала её доступной. */

Читайте также:  Thread sleep java монитор

Все функции и классы PHP имеют глобальную область видимости — они могут быть вызваны вне функции, даже если были определены внутри и наоборот.

PHP не поддерживает перегрузку функции, также отсутствует возможность переопределить или удалить объявленную ранее функцию.

Замечание: Имена функций регистронезависимы для символов ASCII от A до Z , тем не менее, предпочтительнее вызывать функции так, как они были объявлены.

Функции PHP поддерживают как списки аргументов переменной длины, так и значения аргументов по умолчанию. Смотрите также описания функций func_num_args() , func_get_arg() и func_get_args() для более детальной информации.

Можно вызывать функции PHP рекурсивно.

Пример #4 Рекурсивные функции

Замечание: Рекурсивный вызов методов/процедур с глубиной более 100-200 уровней рекурсии может вызвать переполнение стека и привести к аварийному завершению скрипта. В частности, бесконечная рекурсия будет считаться программной ошибкой.

User Contributed Notes

Источник

Обращение к функциям через переменные

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

Переменные функции не будут работать с такими языковыми конструкциями как echo , print , unset() , isset() , empty() , include , require и другими подобными им операторами. Вам необходимо реализовывать свою функцию-обертку (wrapper) для того, чтобы приведенные выше конструкции могли работать с переменными функциями.

Пример #1 Работа с функциями посредством переменных

function bar ( $arg = » )
echo «In bar(); argument was ‘ $arg ‘.
\n» ;
>

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

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

Читайте также:  Euler from quaternion python

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

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

Вы также можете вызвать методы объекта, используя возможности PHP для работы с переменными функциями.

Пример #2 Обращение к методам класса посредством переменных

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

function Bar ()
echo «This is Bar» ;
>
>

$foo = new Foo ();
$funcname = «Variable» ;
$foo -> $funcname (); // Обращаемся к $foo->Variable()

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

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

class Foo
static $variable = ‘static property’ ;
static function Variable ()
echo ‘Method Variable called’ ;
>
>

echo Foo :: $variable ; // Это выведет ‘static property’. Переменная $variable будет разрешена в нужной области видимости.
$variable = «Variable» ;
Foo :: $variable (); // Это вызовет $foo->Variable(), прочитав $variable из этой области видимости.

С версии PHP 5.4.0, можно вызывать callable функцию помещенную в переменную.

Пример #4 Сallable-фукнции

class Foo
static function bar()
echo «bar\n»;
>
function baz()
echo «baz\n»;
>
>

$func = array(«Foo», «bar»);
$func(); // prints «bar»
$f = array(new Foo, «baz»);
$func(); // prints «baz»
$f = «Foo::bar»;
$func(); // выведет «bar» в PHP 7.0.0 и выше; в предыдущих версиях это приведет к фатальной ошибке

Список изменений

Версия Описание
7.0.0 ‘ClassName::methodName’ доступна как функция-переменная.
5.4.0 Массивы, являющиеся корректными callable-методами, доступны как функции-переменные.

Источник

Оцените статью