Php默认函数的第一个值


Php default function first value

在php默认函数中,以下代码有解决方案吗?

function sum($num1=20,$num2=10)
{
     $sum=$num1+$num2;
     echo $sum;
}
sum('',40);

这里的问题是第一个默认值不起作用。例如,如果我写sum(40);它会给我一个40+10=50,但我希望答案是40+20=60。需要使用第一个默认值。

php中函数调用中的参数从左到右分配。所以,你不能真的skip第一个论点,只给出第二个。这是函数调用在php中的工作方式,您不能更改它

但是,您可以通过给出default values inside the function body来解决这个问题。

首先检查是否有任何参数为空,然后为其赋值,如下所示:

<?php
function sum($num1,$num2)
{
    //giving the arguments default values
    $num1==null ? $num1 = 20 : null;
    $num2==null ? $num2 = 10 : null;
    $sum=$num1+$num2;
    echo $sum;
}
sum(null, 40); // echoes 60
sum(40, null); // echoes 50
?>

这不是优雅的,但应该有效:

function sum($num1=null,$num2=null)
{
    $num1 = ( empty($num1) || is_null($num1) ) ? 20 : $num1;
    $num2 = ( empty($num2) || is_null($num2) ) ? 10 : $num2;
    $sum = $num1 + $num2;
  echo $sum;
}
sum('', 40)

如果您的问题是关于PHP函数中参数的默认值,那么它不会以这种方式工作。

function sum($num1=20,$num2=10)
{
     $sum=$num1+$num2;
     echo $sum;
}
sum('',40);

函数和需要两个参数。您通过添加默认值使这些参数成为可选参数。将考虑这些默认值如果没有参数。

这意味着

sum();

有效,并且将使用这两个默认参数。它将呼应10+20的结果,即30。

现在你可以试试

sum(70);

这将返回80,因为您的第一个参数已定义(70),而第二个参数未定义,因此$num2采用默认值,即10。

除此之外,您不能只为第二个参数输入值,而让第一个参数使用默认值。

编辑:我做了一个快速的研究,找到了一个很好的方法来完成这项工作:带可选参数的PHP函数

这会很好地工作:

function sum($num1 = null, $num2 = null)
{
    $nums = array_filter(array($num1, $num2, 20, 10));
    echo array_shift($nums) + array_shift($nums);
}