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

    +159

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    protected function readConfig($configPath) {
        $ini = parse_ini_file($configPath);
        foreach ($ini as $key => $value) {
            $config[$key] = $value;
        }
        return $config;
    }

    Запостил: xarper, 21 Июня 2011

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

    • Возможно заглушка, чтобы в будущем сделать тот самый ZEND-овский разбор .ini-файлов как массивов бесконечной вложенности, заданной через точку в ключе
      config.element.sub_element = value
      Ответить
      • Можно даже не делать а взять готовый Zend_Config_Ini.php.
        Ответить
    • что не так? надо было использовать хуеву тучу несколько библиотек для обработки .ini файлов для получения конфига?
      Ответить
      • Строчки 3-5 не делают никакой полезной работы, кроме генерации ошибки уровня notice
        Ответить
        • Согласен. Скорее всего временная заглушка с будущим расширением
          Ответить
        • А что там генерирует notice? Ничего такого не заметил...
          Ответить
      • результат работы функции не изменился бы, если бы она выглядела как
        return parse_ini_file($configPath);

        а вообще - неясно, с какой целью написана функция, которая является просто оберткой для встроенной пхп-функции. причем оберткой, нисколько не расширяющей функционал
        Ответить
        • >а вообще - неясно, с какой целью написана функция, которая является просто оберткой для встроенной пхп-функции. причем оберткой, нисколько не расширяющей функционал

          Задел на будущее расширение.

          Или еще как вариант, реализация интерфейса.
          Может у них жутко сложная система, которая помимо прочего предусматривает возможность хранения конфигов в куче разных форматов, а для чтения использует классы с интерфейсом содержащим функции типа readConfig, processConfig, getConfig, writeConfig и.т.д.

          Хотя конечно скорее всего кто-то просто маны не дочитал по parse_ini_file.
          Ответить
      • Дело не в функции parse_ini_file, а в том, что как сказал warider, строки 3-5 ничего нового не делают.
        С таким же успехом все тело ф-ции можно было бы заменить на
        return parse_ini_file($configPath);
        Ответить
    • обязательно конфигу хранить в ини? можно в коде (если конфигурация только для чтения) или в базе.
      Ответить
      • >можно в коде (если конфигурация только для чтения)
        В LISP в некоторых подходящих случаях, согласно парадигмы языка, принято хранить конфигурацию в коде, не смотря на то, что она не только для чтения.
        Ответить
        • с лиспом незнаком, как перезаписывать конфигу в коде?
          Ответить
          • >как перезаписывать конфигу в коде?
            очевидно тут без кепа не разобраться.
            Ответить
            • наверное так (на языке сабжа):
              $f=fopen(__FILE__,'a');
              fputs($f,'$config["a"]="'.$config["a"].'";');
              fclose($f);
              Ответить
          • В Лиспе любой код можно модифицировать на любом этапе, ну только иногда это не принято делать, и будут, например, предупреждения. Конфиги в коде - нормальная практика, например .emacs - файл настроек emacs, соответственно :)
            ;; setup erlang mode
            ;; add the location of the elisp files to the load-path
            (setq load-path (cons  "/usr/lib/erlang/lib/tools-2.6.5/emacs"
                     load-path))
            ;; set the location of the man page hierarchy
            (setq erlang-root-dir "/usr/lib/erlang")
            ;; add the home of the erlang binaries to the exec-path
            (setq exec-path (cons "/usr/lib/bin" exec-path))
            ;; load and eval the erlang-start package to set up 
            ;; everything else 
            (require 'erlang-start)
            . . . и так далее

            это начало моего .emacs :)
            Ответить
      • 1) parse_ini_file быстрее чем include пхп-шного массива
        2) .ini - файл читабельней пхп-шного массива, особенно людям незнакомым с языком

        База быстрее, конечно, но в чем ты будешь хранить конфиг коннекта к базе?
        Ответить
        • 1) разве? пруф
          Ответить
          • Достигается это за счет того, что с одной стороны parse_ini_file одна из древнейших функций и реализована на чистом C (ее же сам пхп использует при запуске, для чтения своих конфигов). А с другой стороны при include массива приходится запускать парсер пхп-шного кода. Скрипт же не знает, что вы там только массив объявляете.

            http://a-vertigo.ru/test.php?iterations=1
            http://a-vertigo.ru/test.php?iterations=100
            http://a-vertigo.ru/test.php?iterations=10000

            test.php : http://codepad.org/nDU7N3El
            include.php : http://codepad.org/D5Tz7Cdi
            include.ini : http://codepad.org/u3xJUo0b

            Если не верится, могу еще объявить пхп-шный массив как одно целое.
            Ответить
            • Спасибо, познавательно
              Ответить
              • Познавательно, хотя толку с этих знаний нет. Применить негде. Не существует проектов, в которых разница в производительности была бы заметна, тк файл константных настроек подключался бы 10000 раз за страницу. Ибо, традиционно всё вытаскивают из бд.

                Так что без разницы, каким образом подключать эти самые настройки...

                А вот писать и работать с настройками в php формате не удобно и громоздко, так что выбирая между php и ini - лучше подходит последний.
                Ответить
              • Неужели в php нельзя более удобно задавать Dictionary\map(в PHP массивы), например что-нибудь более декларативное?

                Что-нибудь типа:
                $settings[] =
                {
                  'write', 'open';
                  'read', 'open';
                  'template', 'default';
                  'side', 
                  {
                     'comments', '{single}';
                     'footer', '*';
                     'sidebar', 'YOOou!'
                  };
                  'cg_pack_per_page', 20;
                  'per_page', 30
                };
                ?
                Ответить
                • Можно.

                  Только когда речь о подключаемом файле настроек, обычно его задают как я сделал в примере.
                  Далеким от языка людям так удобнее, комментарий - строчка со значением, никаких лишних скобочек о предназначении которых надо ломать голову, почему одно вложено в другое.
                  Ответить
                  • А насколько близко я написал к возможной краткой форме задания настроек? Или может можно пример правильной краткой формы записи этого?
                    Ответить
                • В следующей версии собираются включить сокращённый синтаксис для массивов — подобный JSON. Впрочем, для конфигов и сейчас никто не мешает использовать JSON.
                  Ответить
                  • вот так наконец пхп 7 перестанет быть пхп. правда говном быть не перестанет (
                    Ответить
                    • >вот так наконец пхп 7 перестанет быть пхп
                      Когда-нибудь PHP вообще превратиться в функциональный язык. Во будет потеха. :D
                      Ответить
            • Ссылки недоступны. Какой багор )))
              Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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