Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 调用函数时如何省略中间参数的默认值?_Php_Default Value_Optional Parameters - Fatal编程技术网

Php 调用函数时如何省略中间参数的默认值?

Php 调用函数时如何省略中间参数的默认值?,php,default-value,optional-parameters,Php,Default Value,Optional Parameters,我有以下职能: function abc( $name, $city = 'duhok', $age = 30 ){ echo $name.", ".$city.", ".$age; } abc( 'Dilovan', null, 26 ); // output: Dilovan, , 26 我想输出威尔:Dilovan,duhok,26 我想要一种不用设置第二个参数和第二个参数写入默认值的方法来使用这个函数 abc( 'Dilovan', [what i use here to

我有以下职能:

function abc( $name, $city = 'duhok', $age = 30 ){

    echo $name.", ".$city.", ".$age;

}

abc( 'Dilovan', null, 26 ); // output: Dilovan, , 26
我想输出威尔:
Dilovan,duhok,26

我想要一种不用设置第二个参数和第二个参数写入默认值的方法来使用这个函数

abc( 'Dilovan', [what i use here to write defualt value ?], 26 );

通过
null

abc( 'Dilovan',null, 26 );
测试

function abc( $name, $city = null, $age = 30 )
{
    if( $city == null )
    {
        $city = 'duhok';
    }

   echo $name.", ".$city.", ".$age;
}


abc( 'Dilovan', null, 26 );

简短回答:如果不编写一些代码,这是不可能的

解决方案1 将此逻辑添加到函数体而不是声明中;例如:

function abc($name, $city = null, $age = 30)
{
    $city = $city !== null ? $city : 'duhok';
    // rest of your code
}
然后您可以这样调用函数:

abc('Dilovan', null, 29);
如果给定的
$city
null
,则将分配默认值

解决方案2 您可以使用查找参数的默认值:

$rf = new ReflectionFunction('abc');
$params = $rf->getParameters();

$default_city = $params[1]->getDefaultValue();

abc('Dilovan', $default_city, 26);
试试这个

function abc( $name, $city = 'duhok', $age = 30 )
{
    if($city == null || $city == NULL)
    {
        $city = 'duhok'
    }

   echo $name.", ".$city.", ".$age;
}

我不同意这是对那个问题的重复。此问题询问如何应用参数列表中给出的默认值。在这种情况下,这将是“duhok”。(答案可能是一样的,但我认为问题不在于此。)@user2864740,好的。简短的回答是:这是不可能的。有一个建议:谢谢你的回答,@sectus我想要它脱离PHP库的标准方式。如果这段代码帮助你,请标记为正确的答案。在没有事先进行一些交互的情况下哄骗用户接受你的答案是不礼貌的。是的,我知道这种方式,但我想把它传递给打印参数的默认值,这是可能的??在我看来,你不能以不同的方式这样做OK,谢谢你的帮助,这意味着不可能,非常感谢。嗯,为什么这在PHP中是不可能的???@user3928495这就是默认值在大多数语言中的实现方式;它意味着只有在根本没有通过的情况下才会产生默认值。这也是为什么可选参数总是出现在声明后面的原因。@user3928495我已经更新了我的答案,以说明如何从任何函数中获得默认值。我将尝试使用反射,这是最好的方法。谢谢你的帮助。当我通过null时,我不会打印任何东西。我知道这种方式,但我想把它传递给打印参数的默认值