PHP: Анонимные функции

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

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

<?php

  function foo() {
    echo "функция foo()<br>\n";
  }


  $my_func = 'foo';
  
  // Теперь мы можем запустить функцию foo() при помощи переменной $my_func, 
  // которая хранит имя указанной функции в виде строки
  $my_func();        // Вызываем функцию foo()

?>

Такая концепция PHP имеет название «переменные-функции». Она заключается в том, что если добавить к переменной в конце круглые скобки, то интерпретатор PHP проверит сначала, не существует ли функции с именем равным значению переменной и если такая функция есть - выполнит ее.

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

<?php

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


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

?>

Анонимные функции

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

<?php

  $my_func = function($str) {
    echo "hello $str";
  };    // точка с запятой обязательна

  $my_func('World!');

?>

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

Анонимные функции отличаются от именованных тем, что создаются только в тот момент, когда до них доходит выполнение, поэтому воспользоваться ими можно только после их определения:

<?php

  // этот пример вызовет ошибку
  $my_func('World!');
 
  $my_func = function($str) {
    echo "hello $str";
  };

?>
    
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011-2016 © puzzleweb.ru

Реклама на сайте | Обратная связь