在 PHP 函数中使用数组作为默认参数

2022-08-30 21:58:25

是否可以在 PHP 函数中使用数组作为默认参数?

我想执行以下操作:

$arr = array(1,2,3,4);

function sample($var1, $var2, $var3 = $arr){
    echo $var1.$var2;
    print_r($var3);
}

sample('a','b');
// Should still work without the third parameter and default to $arr

答案 1

不,这是不可能的,默认值的右手表达式必须是常量或数组文本,即

function sample($var1, $var2, $var3 = array(1, 2, 3, 4))
{
}

如果你想要这样的行为,你可以使用闭包:

$arr = array(1, 2, 3, 4);

$sample = function ($var1, $var2, array $var3 = null) use ($arr) {
    if (is_null($var3)) {
        $var3 = $arr;
    }

    // your code
}

$sample('a', 'b');

你也可以用一个类来表达它:

class Foo
{
    private static $arr = array(1, 2, 3, 4);

    public static function bar($var1, $var2, array $var3 = null)
    {
        if (is_null($var3)) {
            $var3 = self::$arr;
        }

        // your code here
    }
}

Foo::bar('a', 'b');

答案 2

您无法进入函数定义,您必须执行以下操作:$arr

function sample($var1, $var2, $var3 = array('test')){
    echo $var1.$var2;
    echo print_r($var3);
}

sample('a','b'); // output: abArray ( [0] => test ) 1

或者,如果你想真的很脏(我不会推荐它):

$arr = array('test');

function sample($var1, $var2, $var3 = null){
    if($var3 == null){
      global $arr;
      $var3 = $arr;
    }
    echo $var1.$var2;
    echo print_r($var3);
}

sample('a','b');