【问题标题】:php - many optional parameters [duplicate]php - 许多可选参数
【发布时间】:2013-01-02 13:22:49
【问题描述】:

可能重复:
Any way to specify optional parameter values in PHP?
PHP function - ignore some default parameters

假设我有这样的功能:

function foo($name = "john", $surname = "smith") { ... }

我是这样打电话的:

$test = foo("abc", "def");

现在想象一下,我想跳过名字而只使用姓氏,这如何实现?如果我只做 $test = foo("def");编译器怎么知道我指的是姓氏而不是名字?我知道它可以通过传递 NULL 来完成,但我需要这个来做类似这样的事情:

$test = foo($_POST['name'], $_POST['surname']);

提前致谢。

【问题讨论】:

标签: php function parameters


【解决方案1】:

你可以试试这个-

$num_args = func_num_args();
if($num_args == 1)
 $surname = func_get_arg(1);
else
 $surname = func_get_arg(2);
 $name = func_get_arg(1);

请在使用前进行测试。

【讨论】:

  • +1 以获得最佳答案,我打算发布那个,但谁是第一个应该得到奖励。
【解决方案2】:

你的代码

$test = foo($_POST['name'], $_POST['surname']);

如果第一个参数为空,也会在第一个参数中传递 NULL,这样编译器就会知道它取决于第二个参数。在参数列表中有comma 已经告诉 PHP 这里有两个参数。

【讨论】:

    【解决方案3】:

    您可以通过将一个空字符串传递给您的函数并在您的函数中检测传递的参数是否为空字符串,如果是,则将其替换为默认值。这将使您的函数调用如下:

    foo('','lastname');
    

    您可以将这几行添加到函数的开头,以检测是否已将空字符串作为参数传递:

    function foo($name = "john", $surname = "smith") { 
        if($name==='') { $name = 'john'}
        //more code 
        ... }
    

    【讨论】:

      【解决方案4】:

      我通常会这样做:

      function foo($parameters = array())
      {
          print_r($parameters);
      }
      
      foo($_POST); //will output the array
      

      这是我使用的,当我期望超过 3 个参数时。

      但你不妨使用以下内容:

      function foo()
      {
          $args = func_get_args();  
          foreach ($args as $arg) {  
              echo "$arg \n";  
          }
      }
      

      【讨论】:

      • +1 为另一个想法很好地解释更多所以他可以使用这个!
      • 如果函数只需要使用两个变量,而将整个 $_POST 数组作为参数传递,那就太浪费内存了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多