【问题标题】:Default function Variables in PHP versus PythonPHP 与 Python 中的默认函数变量
【发布时间】:2012-12-19 21:10:51
【问题描述】:

在 Python 中,可以有一个包含多个变量的函数,这些变量都具有默认值。然后只是传递其中一个值的值。所以如果我有

function foo(a=10,b=50, c=70)
    pass
    pass
    return

那我可以打电话了

foo(b=29)

它会调用

foo(10,29,70) 

(对所有值使用默认值,对一个变量使用准确值)。

在 PHP 中是否有类似的可能?

【问题讨论】:

    标签: php python function default-value


    【解决方案1】:

    使用数组作为参数。例如:

    function a(array $params) {
        $defaults = array(
            'a' => 10,
            'b' => 50,
            'c' => 70,
        );
        $params += $defaults;
        // use $params
    }
    
    a(array('b' => 29));
    

    【讨论】:

    • 哇!在我现在正在编写的代码中,这将是矫枉过正。但这是一个非常有趣的解决方案。
    • 如果你有很多参数(其中很多不是必需的),通常我会建议只传递某种结构的一个参数。由于数组是简单的解决方案(如示例中所示),我建议创建代表参数的类。例如,function search(Filter $filter)Filter 类将自己保存参数。这提供了更高的可读性(因为您不必计算第 8 个参数等),但有时可能会过度设计。
    【解决方案2】:

    不,没有与 PHP 中的等价物。您可以为函数参数设置默认值,但它们是从左到右计算的并且没有命名:

    function test($var1 = 'default1', $var2 = 'default2')
    {
    
    }
    

    在该示例中,这两个变量是可选的,但如果要指定第二个参数,则必须指定第一个参数。

    test(); // works
    test('arg1'); // works
    test('arg1', 'arg2'); // works
    test('arg2'); // this will set the first argument, not the second.
    

    如果您需要灵活使用可选参数,一个常见的解决方法是传递一个数组作为参数:

    function test($options)
    {
    
    }
    

    这可以以单个关联数组的形式具有可变数量的参数:

    $options = array('var1' => 'arg1', 'var2' => 'arg2');
    test($options);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多