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

Discussion in 'PHP' started by b3, 6 Nov 2010.

  1. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    В PHP 5.3 появилась поддержка так называемых анонимных функций или, говоря другими словами, возможности создавать функции без имени.

    Официальное руководство приводит такой пример:
    PHP:
    <?php
    $greet 
    = function($name)
    {
        
    printf("Hello %s\r\n"$name);
    };

    $greet('World');
    $greet('PHP');
    ?>
    Анонимные функции (или "Лямбда" см. Лямбда-исчисление) реализуют концепцию функций, являющихся значением (в примере выше, анонимная функция является значением $greet).
    В англоязычной статье Функционал PHP 5.3 - что такое анонимные функции и замыкания? также приводится пример связанных с анонимными функциями замыканий - функций, определённых внутри других функций и имеющих доступ к их локальным переменным (см. Замыкания).

    Пара слов о замыкании:
    Замыкание (англ. closure) в программировании — процедура, которая ссылается на свободные переменные в своём лексическом контексте.
    PHP имеет встроенную поддержку замыканий начиная с версии 5.3. Пример замыкания с одной параметрической и одной контекстной переменной:
    PHP:
    <?php
    function getAdder($x)
    {
        return function (
    $y) use ($x) {
            
    // or: lexical $x;
            
    return $x $y;
        };
    }
    ?>
    Для более ранних версий возможно использовать одноименный шаблон проектирования, который реализуется в библиотеке Николаса Нассара.
     
    _________________________
  2. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    такие функции ведь не удастся напрямую использовать в
    usort, uasort, array_map..?