Лучшие практики PHP: переменные перепередачи из файла конфигурации при вызывании функций или глобального использования?

Как Adam упомянул от кавычки MSDN, UUID являются 128-разрядными значениями. Это означает, что они берут 16 байтов RAM для содержания значения. Текстовое представление возьмет 32 байта (два байта для каждого единственного байта), плюс эти 4 дефиса, плюс две скобки, если Вы захотите включать их; это составляет 38 байтов.

Просто имеют в виду, что, если Вы представляете UUID пользователям Вашего программного обеспечения, они могут предоставить UUID или без скобок. Если Вы храните значение где-нибудь, лучше хранить его как 16-байтовое двоичное представление. Если Вы взаимодействуете с другими реализациями UUID, можно хотеть использовать основной текстовый формат для совместимости, так как различные реализации делают разные вещи для порядка байтов при хранении двоичного значения UUID.

7
задан Andrew Swift 18 September 2009 в 09:16
поделиться

7 ответов

Помните, что вы можете установить значение по умолчанию для своей функции:

function makebackup($table, $dir = CONFIG_BACKUP_PATH)

Таким образом, вам не придется указывать переменную в случае по умолчанию, вы можете просто предположить, что настроенный путь резервного копирования - значение по умолчанию.

Предполагается, что вы используете константы, а не глобальные переменные.

1
ответ дан 7 December 2019 в 01:23
поделиться

Передачу ссылок намного проще проверить (вы можете создать фиктивные объекты конфигурации). Глобалы меньше. Вы можете утверждать, что ссылка на метод не равна нулю. Я бы назвал тестируемость лучшей практикой.

1
ответ дан 7 December 2019 в 01:23
поделиться

Вторая альтернатива,

makebackup('my_table', $backup_path);

- это функция многократного использования и поэтому обычно предпочтительнее. Дополнительный аргумент не является большой ценой за возможность повторного использования.

Если вы полностью уверены, что когда-либо будете использовать эту функцию только в этом конкретном приложении и только для $ backup_path, тогда, возможно, рассмотрите глобальную альтернативу. Даже тогда хорошо проверить, действительно ли глобальная переменная существует. И имейте в виду, что избавиться от глобальных переменных, начав их использовать, чрезвычайно сложно.

5
ответ дан 7 December 2019 в 01:23
поделиться

Я думаю, вы должны использовать для этих целей конфигурацию класса Singleton of Factory.

function makebackup($table)
{
   $backup_path = ConfigFactory().getConfig($some_site_specific_data).getBackupPath()
   mysqldump($table, $backup_path)
}
1
ответ дан 7 December 2019 в 01:23
поделиться

Не уверен, что существует действительно «правильный» способ сделать это, но другой вариант будет примерно таким:

function makebackup($table, $backup_path = '') {
    if ( $backup_path == '' ) {
        if ( isset($GLOBALS['backup_path']) ) {
            $backup_path = $GLOBALS['backup_path'];
        }
        else {
            die('No backup path provided');
        }
    }
 }

Таким образом, вы можете либо передать значение (для тестирования и использования в будущем ) или, если вы не передадите его, функция будет искать возможную глобальную переменную.

0
ответ дан 7 December 2019 в 01:23
поделиться

Альтернативный вариант - использовать константы php с define ().

Ваш config.php будет устанавливать константы для каждого параметра (соединение mysql, стиль css, то, что угодно). Тогда вам не нужно будет передавать переменные функциям или использовать глобальные.

Одним из недостатков является то, что вы можете определять только логические значения, числа с плавающей запятой, строки или целые числа, а не сложные структуры данных.

1
ответ дан 7 December 2019 в 01:23
поделиться

Отметьте эту глобальную переменную

Лично я также очень четко обозначил глобальные переменные . Если я должен их использовать, я хочу прояснить их.

Итак, здесь я бы переименовал $ backup_path в $ GLOBAL_backup_path . Каждый раз, когда я видел это, я знал, что с ним нужно быть осторожным.

1
ответ дан 7 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: