Задача по PHP №3 - хитра функція

Як і всі попередні задачі по php суть полягає в отриманні кращих знань цієї мови. Сьогодні у нас буде задача на логіку. Виконати цю задачу зможуть по справжньому кодери які шарять. Сьогоднішня задача і відповідь заставить вас задуматись про можливості мови дещо більше. Отже погнали ;)

У вас є простий неробочий код код:

  function *($data) {
      echo $data . ' ';
  }
  *('i`m ');
  *('good');
  *('coder');

Необхідно зробити так, що б він запрацював не використовуючи літер і не видаляючи рядків. Наче все правильно сформулював. Копіюємо код в редактор і нажимаємо все крім a-zA-Z та не видаляємо рядки. Ну що щасти вам. Розгадка трохи дальше.

Ви подумаєте що це не реально, що функція має називатись нормально і без літер тут не справитись. А от і ні. Як ні? Ну так, ні. Думаємо думаємо :)

Зроблю маленький відступ що б зразу не показувати вам відповідь. Ніхто не каже що вам потрібно це знати на 100% або що вам необхідно це використовувати. На мою думку знати треба для того, що б побачити можливості мови. Адже бувають моменти коли треба переписати код і в першу чергу його треба зрозуміти. І всі ми прекрасно знаємо які бувають кодери і який код вони пишуть.

Якщо вам не вдалось зробити виконати цю задачу погуляйте сайтом рнр в розділі функцій: http://www.php.net/manual/en/language.functions.php

А тепер глянемо на відповідь. Вся приманка криється в цьому що функції можуть присвоюватись змінним. Вони називають "Variable functions". Як вони працюють, та дуже просто. Ось кусок коду:

  $showNumber = function(){
    echo 1;
  };
  $showNumber();

В деталі вдаватись не буду прочитати можна все на сайті php. Як це нам допоможе, запитаєте ви. Тут треба згадати те як можна створювати змінні і як їх називати. Змінну можна створити так:

  $var = 1;
  echo $var; // 1
  ${'testVar'} = 1;
  echo $testVar; // 1

Фактично ми уже близько до розгадки. Ось відьповідь на задачу:

  ${'*'} = function ($data) {
   echo $data . ' ';
  };
  ${'*'}('i`m');
  ${'*'}('good');
  ${'*'}('coder');

Якщо вам скажуть що назва змінною не може містити зірочку або інший спеціальний символ, не вірте :) Надіюсь було цікаво. Якщо побачили помилку пишіть :)

Коментарів: (3)

  1. Patron
    Patron 2012-10-20 01:01 Відповісти

    function __($data) {echo $data . ' ';}__('i`m ');__('good');__('coder');
  2. yamorfie
    yamorfie 2012-10-29 14:02 Відповісти
    цікаві такі штуки, але в практиці не дуже корисні
  3. Funivan
    Funivan 2012-10-29 14:02 Відповісти

    Конкретно з цією задачою повністю погоджуюсь. В практиці часто не застосуєш а от http://funivan.com/zadacha-po-php-1-p26.html ця фішка буває трапляється в роботі.