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

    +146

    1. 1
    2. 2
    //Функция some_function возвращает данные в формате var1=val1&var2=val2
    parse_str(some_function());

    Мой код примерно полуторагодовой давности.
    Разбирал старые проекты встретил и подумал - говно или имеет право на жизнь?
    Классическое

    //Функция some_function возвращает данные в формате val1:val2
    list ($var1, $var2) = explode(':', some_function())
    ведь будет работать медленнее, не так ли? :)

    Запостил: 7ion, 02 Февраля 2011

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

    • А возвратить массив неспортивно?
      Ответить
      • Массив из двух элементов будет затратнее хранения двух переменных.
        Ответить
        • У вас с головой хорошо? Вы говорите о гребаных двух переменных, а рассуждаете о скорости.

          У похапистов вообще на тему скорости с головой непорядок - любой идиотский алгоритм они выдают за оптимизацию по скорости.
          Ответить
        • 1)Нужно делать не микро оптимизации, а оптимизации алгоритма.
          2)Нужно делать оптимизацию, только при наличии весомых оснований, если это требует каких-то затрат, по сравнению с более простым способом.
          Ответить
        • На 10 байт? Да и то не факт.
          Ответить
        • А разбор строки у Вас "бесплатный"?
          Ответить
        • >Массив из двух элементов будет затратнее хранения двух переменных.

          Как будто explode не создает массив, предварительно изнасиловав строку с данными. Оптимизация, да.
          Ответить
          • рассмотрим запись:
            <?php
            $pair=explode('=',$line);
            list($key,$value)=explode('=',$line);
            внимание, вопрос:

            какая запись понятнее,
            $pair[0], $pair[1], или $key,$value?
            Ответить
            • Что мешает сделать list($key,$value)=$pair?
              Ответить
              • Что мешает сделать это сразу, а не создавать лишний массив?
                Ответить
                • Я не знаю, что мешает вам сделать это сразу, а не упаковывать данные в строку, а потом парсить её обратно.

                  Вы наверное вместо $x=expr... всегда пишете parse_str("x=".urlencode(expr...))?
                  Ответить
                  • А кто вам сказал, что я так делаю?
                    Мне вообще массив не нужен, поэтому функция возвращает строку, которая парсится parse_str.
                    Это намного быстрее, чем explode и занимает меньше памяти, чем массив.
                    Ответить
                    • Вы ошибаетесь, это может быть намного медленнее и требовать намного больше памяти (и скорее всего почти всегда). Не говоря уж о побочных эффектах.
                      Ответить
                      • Каких побочных эффектах?
                        Ответить
                        • Потеря типа. А если не используете urlencode -- то и возможные глюки вплоть до эксплойта.

                          Вот не пойму, что вам мешает прямо в функции присвоить результат данным глобальным переменным? Большей части недостатков избежали бы, с так волнующими вас скоростью и памятью тоже было бы лучше.
                          Ответить
                          • >А если не используете urlencode -- то и возможные глюки вплоть до эксплойта.
                            Функция возвращает строго определенные значения, в которых не может быть знака равно и амперсанда.

                            >что вам мешает прямо в функции присвоить результат данным глобальным переменным?
                            >глобальным переменным?
                            Ой, мама.
                            Ответить
              • опять?
                Ответить
          • В том-то и дело, что parse_str массив не создает, а explode - создает, вне зависимости от применения list массив в памяти будет создан.
            Ответить
    • извращаетесь
      Ответить

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