【问题标题】:How to omit default values of middle parameters when calling a function? [duplicate]调用函数时如何省略中间参数的默认值? [复制]
【发布时间】:2014-10-03 22:06:40
【问题描述】:

我有功能:

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

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

}

abc( 'Dilovan', null, 26 ); // output: Dilovan, , 26

而我要输出 will:Dilovan, duhok, 26

我想在不设置第二个参数的情况下使用这个函数,第二个参数写入默认值。

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

【问题讨论】:

  • 我不同意这是该问题的重复。这个问题询问如何应用参数列表中给出的 默认值。在这种情况下,这将是“duhok”。 (解决方案可能是一样的,但我不认为问题是。)
  • @user2864740 ,好的。简短的回答是:这是不可能的。
  • 感谢您的回答,@sectus 我希望它成为 PHP 库的标准。

标签: php default-value optional-parameters


【解决方案1】:

简短的回答:不写一些代码是不可能的。

解决方案 1

将此逻辑添加到您的函数体而不是声明中;例如:

function abc($name, $city = null, $age = 30)
{
    $city = $city !== null ? $city : 'duhok';
    // rest of your code
}

然后你可以像这样调用函数:

abc('Dilovan', null, 29);

如果给定的$city 是null,这将分配默认值。

解决方案 2

您可以使用Reflection 找出参数的默认值是什么:

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

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

abc('Dilovan', $default_city, 26);

【讨论】:

  • 好的,这意味着不可能,非常感谢。
  • 嗯,为什么这在 PHP 中是不可能的???
  • @user3928495 这就是大多数语言中默认值的实现方式;如果根本没有传递,它意味着产生它的默认值only。这也是为什么可选参数总是在声明的后面。
  • @user3928495 我已经更新了我的答案,以展示如何从任何函数中获取默认值。
  • 我会尝试使用反射,这是最好的主意谢谢你的帮助。
【解决方案2】:

通过null:

abc( 'Dilovan',null, 26 );

【讨论】:

  • 当我通过 null 时不会打印任何东西
【解决方案3】:

试试这个

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

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

【讨论】:

  • 我知道这种方式,但我想传递一些东西来打印参数的默认值
【解决方案4】:

测试Here

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

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


abc( 'Dilovan', null, 26 );

【讨论】:

  • 如果此代码对您有帮助,请标记为正确答案
  • 在没有先进行一些互动的情况下诱使用户接受您的答案是不礼貌的。
  • 是的,我知道这种方式,但我想传递一些东西来打印参数的默认值这是可能的??
  • 在我看来你不能以不同的方式做到这一点
  • 好的,感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2011-02-23
相关资源
最近更新 更多