Есть ли преимущество использования parse_str для необязательных параметров функции по сравнению с массивом? - PullRequest
1 голос
/ 06 мая 2009

Я случайно внес некоторые изменения в блог WordPress и заметил, что они используют parse_str (http://php.net/parse_str) для анализа и установки своих необязательных параметров для функции.

Мне интересно, есть ли в этом преимущество перед отправкой массива?

Примеры:

С массивом:

$blahOptions = array(
    'option_1' => true,
);
BlahArray($blahOptions);
function BlahArray($options = array()) {
    $defaults = array(
        'option_1' => false,
        'option_2' => 'blah',
    );
    // this would probably be in a function to be used everywhere
    foreach ($defaults as $defaultOption => $defaultValue) {
        if (!isset($options[$defaultOption])) $options[$defaultOption] = $defaultValue;
    }
}

С parse_str:

$blahOptions = 'option_1=1';
BlahString($blahOptions);
function BlahString($options = '') {
    $defaults = array(
        'option_1' => false,
        'option_2' => 'blah',
    );
    parse_str($options, $defaults);
    $options = $defaults;
}

Ответы [ 3 ]

6 голосов
/ 06 мая 2009

Нет. Это кажется нелепым способом передачи аргументов функциональных параметров. Я мог бы понять это, если вам нужно было воссоздать переменные $ _GET или $ _POST или что-то в этом роде, но для параметров функции? Это кодовый запах прямо там.

Они должны использовать массив, а затем использовать extract () . Я работал с Wordpress раньше, и мой совет - держать код на расстоянии вытянутой руки. Это не пример программирования моделей.

2 голосов
/ 06 мая 2009

Нет. Недостатков больше, чем преимуществ.

Когда вы используете одну строку, вы можете просто передавать строковые значения. С массивом вы можете использовать каждый тип данных PHP, а тип значений каждого элемента не зависит друг от друга.

1 голос
/ 06 мая 2009

При использовании parse_str вы можете удалить строку запроса из URL, и функция будет работать. Если вы используете массив и хотите использовать строку запроса, вам придется перечислить все в массив перед вызовом функции.

Я не совсем уверен, что это лучший путь, но я вижу, как это может добавить немного гибкости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...