1. PHP / Говнокод #7272

    +160

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    function generateMessage($template, $tokens){
          foreach($tokens as $key => $value){
            $search[] = $key;
            $replace[] = $value;
          }
          return str_replace($search, $replace, $template);
        }
    
    $template = "Здравствуйте, %contact%! К нам поступил запрос на восстановление пароля на сайте...";
    $token['%contact%'] = 'Иван';
    generateMessage($template, $token);
    
    вместо:
    sprintf("Здравствуйте, %s! К нам поступил запрос на восстановление пароля на сайте...", 'Иван');

    нашёл в коде на работе

    Запостил: morozovsk, 17 Июля 2011

    Комментарии (12) RSS

    • Фрагмент «вместо: sprintf...» выглядит, как слово «лопата» в анекдоте. Своё мнение о переделке кода лучше было бы поместить в комментарии.

      В данном конкретном примере и sprintf не нужен. Двойные кавычки в PHP автоматически интерпретируют переменные, поэтому прошёл бы и такой код:
      $contact = 'Иван';
      $template = "Здравствуйте, $contact! К нам поступил запрос на восстановление пароля на сайте...";

      Чем generateMessage хуже стандартного sprintf? В данном примере разницы не видно, но ведь с помощью generateMessage можно реализовать более сложные шаблоны, чем с помощью sprintf. Например, использовать переменную несколько раз или переставлять слова местами. Если я ничего не путаю, то sprintf всего лишь тупо парсит слева направо, подставляя макросы в порядке их упоминания в списке аргументов.
      Ответить
      • Да не тут явно не осилили printf
        Ответить
      • $template = "Здравствуйте, $contact! К нам поступил запрос на восстановление пароля на сайте...";
        эта строка лежит в файле с переводами, $contact в нём не доступен
        Ответить
    • опять веломинишаблоны
      Ответить
    • Bicycle Race
      Ответить
    • function generateMessage($template, $tokens)
      {
        $tpl = "";
        
        for ($i = 0; $i < strlen($template); $i++)
        {
          foreach ($tokens as $k => $v)
          {
            if (substr($template, $i, strlen($k)) == $k)
            {
              $tpl .= "\".\$tokens[\"$k\"].\"";
              $i = $i + strlen($k) - 1;
            }
            else
            {
              $tpl .= substr($template, $i, 1);
            }
          }
        }
        
        $result = eval("\$templatized = \"$tpl\";");
        return $templatized;
      }

      Реквестирую говноконкурс, принимайте эстафету.
      Ответить
    • generateMassage
      Ответить

    Добавить комментарий