в PHP

Closure in php

Всем, кто программировал хотя бы пару раз на js (особенно тем, кто использовал при этом jQuery) знакомо такое понятие как «closure». Это переменная, которая представляет собой анонимную функцию.
Напомню, как это выглядит на js:

  1. $(window).click(function()
  2. {
  3.     alert(‘Triggered click-event on window’);
  4. });
  5. var myMethod = function(){
  6.     alert(‘Yahoo!’);
  7. };

Common

Но далеко не все знают, что точно такой же closure существует и в php и является кроме всего прочего валидным callback’ом.
Собственно выглядит это точно так же:

  1. <?php
  2. add_action(‘wp_footer’, function()
  3. {
  4.     echo ‘<adress>I\’m living in Moldova</adress>’;
  5. });
  6. //Another variant
  7. $myClosure = function()
  8. {
  9.     echo ‘So cool’;
  10. };

Обратите внимание, что при объявлении closure после закрывающей фигурной скобки надо ставить ;

Attention!

Есть маленький нюанс. Заключается он в передаче параметров в closure — ведь нам же нужна не просто функция, а зачастую обработчик какой-то информации.
Как передать данные в анонимную функцию в php? Очень просто.

  1. <?php
  2. $address = ‘I\’m living in Moldova’;
  3. add_action(‘wp_footer’, function() use ($address)
  4. {
  5.     echo ‘<adress>’.$address.‘</adress>’;
  6. });
  7. $address = ‘I\’m from Moscow’;
  8. add_action(‘wp_footer’, function() use ($address)
  9. {
  10.     echo ‘<adress>’.$address.‘</adress>’;
  11. });

При этом в футере WordPress выведется текст

  1. <adress>I’m living in Moldova</adress><adress>I’m from Moscow</adress>