将parse_str用于可选函数参数与数组相比是否有优势?

时间:2009-05-05 22:10:54

标签: php optional-parameters function-parameter

我碰巧对WordPress博客进行了一些更改,发现他们使用parse_strhttp://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 个答案:

答案 0 :(得分:6)

没有。这似乎是传递函数参数参数的荒谬方式。如果你需要重新创建$ _GET或$ _POST变量或类似的东西,但是对于函数的参数,我能理解它吗?这就是那里的代码味道。

他们应该使用数组,然后使用extract()代替。我之前使用过Wordpress,我的建议是保持代码的一致性。它不是模型编程的一个例子。

答案 1 :(得分:2)

没有。缺点多于优势。

当您使用单个字符串时,您只需传递字符串值即可。使用数组,您可以使用每种PHP数据类型,并且每个元素的值类型彼此独立。

答案 2 :(得分:1)

使用parse_str,您可以从URL中删除查询字符串,该函数将起作用。如果您使用数组,并且想要使用查询字符串,则必须在调用函数之前将所有内容枚举到数组中。

我并不完全相信这是最好的方式,但我知道它是如何增加一点灵活性的。