【问题标题】:Specify parameter by name in PHP [duplicate]在PHP中按名称指定参数[重复]
【发布时间】:2013-07-09 15:48:13
【问题描述】:

我不知道这叫什么,但我看到 PHP 支持一个很酷的参数传递,例如:

function myFunc($required_value, $optional_value1 = 'default', $optional_value2 = 'default2'){

}

然后我就可以做到:

myFunc('something', $optional_value2 = 'test');

关于这个问题有两个问题:

  1. 这种技术叫什么(供将来参考)?
  2. 从什么PHP版本开始支持?

【问题讨论】:

  • 对不起,如果这是一个骗局,但由于我不知道该技术叫什么,我真的不知道要搜索什么。
  • 投票以重复关闭。
  • @EduardLuca 您的示例未设置 $optional_value2 参数。它正在创建一个局部变量$optional_value2 并将其值设置为test,然后将test 作为第二个参数$optional_value1 传递,并将第三个参数$optional_value2 作为默认值(default2) .看看我的重复链接,它展示了如何使用不依赖于顺序的数组来拥有灵活的默认参数。
  • 我后来意识到这一点,正如我在@Baba 的回答中的评论中所说的那样。

标签: php parameter-passing


【解决方案1】:

我想到的唯一想法是通过数组传递参数。

function f($params)
{ 
    if(!isset($params['name']) || !isset($params['adress'])) 
    {
        //trigger error throw exception or whatever
    }
    //do something with params
} 

打电话

f(array('name' => 'asdfasdf', 'adress' => 'adfasdf')); 

然后在函数中你可以检查是否有足够的参数来处理函数。

PHP 没有命名参数,例如 C#。

PHP 支持参数的默认值,因此您可以使用它,例如:

 function f($name = "John Doe"){echo $name;}

当你打电话时

echo f(); // John Doe will be displayed
echo f("Robert"); //Robert will be displayed

【讨论】:

    【解决方案2】:

    我不确定 you are able to do 是什么,但 php 还不支持 Named Parameters

    毁灭

    myFunc('something', $optional_value2 = 'test');
    

    并不意味着$optional_value2 将成为函数See Demo 中的'test`

    您当前正在实现的功能在函数中称为Default parameters

    【讨论】:

    • 我明白了。我想我知道我在做什么,以及它为什么有效。传递参数时,我实际上是在为变量赋值,该变量返回true。然后将true 值作为第二个参数传递给函数。谜团已解开,这也是 PHP 不如 Python 的另一个原因。
    • PHP 并不烂 .. 如果您只知道自己在做什么,那就太棒了... 其他语言也一样
    • 如果你愿意,我们可以把讨论移到聊天中,但我之所以这么说,是因为 PHP 与其他语言相比是有限的,所以你可能知道你在做什么,但你在 PHP 中仍然可以得到 10 行代码,而在其他语言中它可以在 2 行中完成。
    • chat.stackoverflow.com/rooms/11/php .... 您可以讨论您的选择
    • 这对 Python 来说太糟糕了
    【解决方案3】:

    它叫default parameters

    在你的例子中。有一个小错误。给定你的功能

    function myFunc($required_value, $optional_value1 = 'default', $optional_value2 = 'default2'){
    .....
    }
    

    您可以通过以下方式调用它:

    myFunc('required_value'); //$optional_value1 = 'default', $optional_value2 = 'default2'
    myFunc('required_value', 'opt1'); //$optional_value2 = 'default2'
    myFunc('required_value', 'opt1', 'op2');
    

    需要注意的是php不支持命名参数,所以顺序很重要。因此,您不能省略中间参数。因此以下语句将是错误的,因为您正在尝试使用命名参数。

    myFunc('something', $optional_value2 = 'test');
    

    更多详情请见this

    【讨论】:

      【解决方案4】:

      这是默认参数

      需要注意的重要一点是可选参数只能在最后指定,因此必需参数在函数定义中位于可选参数之前,例如

      function myFunc($param1,$optional1= 'string',$optional2= 5) {

      }

      在调用函数时,我们可以调用它

      myFunc($param1);
      myFunc($param1 , 'new string');
      myFunc($param1,'string',10);
      

      但不是 myFunc($param1,10); 不允许跳过中间参数!!! 你调用func的方法不对

      在你的例子中。有一个小错误。 你不能省略中间参数。所以下面的函数调用

         myFunc('something', $optional_value2 = 'test'); 
      

      不允许! 进一步 $optional_value2 = 'test' 不能出现在函数调用中...只需将 'test' 作为参数传递给函数。

      【讨论】:

        猜你喜欢
        • 2011-05-01
        • 2011-02-12
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多