За последние 24 часа нас посетили 51823 программиста и 1769 роботов. Сейчас ищут 872 программиста ...

Как тут работает анонимная функция?

Тема в разделе "PHP для новичков", создана пользователем alex455, 22 июл 2011.

  1. alex455

    alex455 Активный пользователь

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    PHP:
    1. echo preg_replace_callback('~-([a-z])~',
    2.                           function ($match) { return strtoupper($match[1]); },
    3.                           'hello-world');
    Взял учебный пример отсюда: http://www.php.net/manual/ru/functions.anonymous.php . Не пойму, как работает
    PHP:
    1. function ($match) { return strtoupper($match[1]); }
    На странице лишь приведён пример, но не объясняется.
    Что делает
    PHP:
    1. function ($match) { return strtoupper($match[1]); }
    ?
     
  2. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    А что делает просто функция
    PHP:
    1. function ($match) {
    2.     return strtoupper($match[1]);
    3. }
    ? то же делает и эта :)

    то етсь получает на вход $match и применяет к первому элементу strtoupper и возвращает обратно
     
  3. alex455

    alex455 Активный пользователь

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    Вот полный пример:

    PHP:
    1. <?php
    2. echo preg_replace_callback('~-([a-z])~', function ($match) {
    3.     return strtoupper($match[1]);
    4. }, 'hello-world');
    5. // выведет helloWorld
    6. ?>
    Почему код выводит "helloWorld"? Подстановки в функцию никакой нет...
     
  4. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    а что должно выводить?
    у вас ищится символ стоящий после чёрточки
    и отправляются в функцию все совпадения
    в 0 элементе будет вся строка соответствующая шаблону
    в 1 - будет то что в скобках
    то есть первая буква после -
    вот к ней применяется функция strtoupper
    и результат возвращается, и то что совпало с шаблоном, заменяется на то что вернула функция, то есть
    -h нашлось по шблоону, а поменялось на H