在PHP函数中传递可选参数

33

如何向 PHP 函数传递可选参数。例如:

function test($required, $optional){..}

我希望能够通过传递一个或两个参数来调用该函数。例如:

test($required, $optional)
test($required);
感谢。

哇,几乎每一个回答这个问题的人都说了完全相同的话。我不知道你是如何选出其中一个的,因为它们都是正确的。 :) - edwardtyl
6个回答

55

试试这个:

function test($required, $optional = NULL){..} 

那么你可以调用

test($required, $optional)

并且使用 $optional 为 null

test($required);  

当我使用具有值的 $required$optional 时,$optional=NULL 会被覆盖吗?这将完美地适用于 $optional 数据吗? - Neocortex

11

使用默认值

function test($required, $optional="default value"){..}

8

1)您可以这样为参数定义默认值:

function test($required, $optional = false) {}

2) 您可以使用 func_num_args() 获取参数数量,func_get_arg($n) 获取第 n 个参数或者使用 func_get_args() 获取所有参数的数组。

您可以在这里找到一个好的总结:函数参数


+1 表示提及另一种方式 - Your Common Sense
是的,如果提到另一种方法,可以加1分。这肯定比整页重复答案要好。 - Stephen Nielsen

6
您也可以这样做:
function test($required, $optional = ''){
    #code
}

在调用时:

test($required)

或者:

test($required, $optional = 'something')

2
使用 test($required, $optional = 'something') 进行调用是误导性的,因为你正在分配 $optional 变量,而不是按名称传递可选参数值。 - McX
@McX 它能工作吗? - Limon
1
@Lemon 它具有副作用,如果不理解清楚可能会导致错误。例如,有人可能尝试使用 f($b='b') 调用 function f($a='', $b='') 并认为它将调用 f('', 'b'),但实际上它将调用 f('b', '') 并设置全局变量 $b='b' - McX
@McX 这是一个很好的观点,但我认为更多的是能够注意到你想要调用的函数。这可以通过添加一行注释来解决,从而防止这种不必要的副作用。 - Limon

2

只需在您的函数中设置默认参数,例如:

function test($required, $optional = null, ... )

现在你可以像这样调用你的函数。
test($required, $optional)
test($required);

0

阅读此内容http://php.net/manual/zh/function.func-get-args.php

在声明函数时不要传递任何参数,就像下面这样

function myMin() {
      $list = func_get_args();
      $min = NULL;
      if (count($list)>0) $min = $list[0];
      for ($i=1; $i<count($list); $i++) {
         if ($min > $list[$i]) $min = $list[$i];
      }
      return $min;
   }

   print("\n Calling a function that uses func_get_args():\n");
   print("    ".myMin()."\n");
   print("    ".myMin(5)."\n");
   print("    ".myMin(5, 6, 2)."\n");
   print("    ".myMin(5, 6, 2, 9, 5, 1, 4, 1, 3)."\n");
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接