在PHP中按名称指定参数

在PHP中按名称指定参数,php,parameter-passing,Php,Parameter Passing,我不知道这叫什么,但我看到PHP支持一个很酷的参数传递,比如: function myFunc($required_value, $optional_value1 = 'default', $optional_value2 = 'default2'){ } 然后我就能做到: myFunc('something', $optional_value2 = 'test'); 因此,与此相关的两个问题: 这种技术叫什么(供将来参考) 因为它支持什么PHP版本 我唯一想到的是通过数组传递参数 fun

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

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

}
然后我就能做到:

myFunc('something', $optional_value2 = 'test');
因此,与此相关的两个问题:

  • 这种技术叫什么(供将来参考)
  • 因为它支持什么PHP版本

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

    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
    

    我不确定你能做什么,但是php还不支持

    毁灭

    myFunc('something', $optional_value2 = 'test');
    
    并不意味着
    $optional_value2
    将成为函数中的“test”

    您当前正在实现的是在其调用的函数中调用的

    以你为例。有一个小错误。考虑到你的功能

    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');
    

    有关详细信息,请参见

    这是默认参数

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

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

    }

    调用函数时,我们可以将其称为

    myFunc($param1);
    myFunc($param1 , 'new string');
    myFunc($param1,'string',10);
    
    但不是myFunc($1,10); 不允许跳过中间参数 您用来调用func的方法是错误的

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

       myFunc('something', $optional_value2 = 'test'); 
    
    这是不允许的!
    进一步的$optional_value2='test'不能出现在函数调用中…只需将'test'作为参数传递给函数。

    如果这是一个重复,很抱歉,但由于我不知道调用了什么技术,我真的不知道要搜索什么。投票以重复方式关闭。@EduardLuca您的示例没有设置
    $optional\u value2
    参数。它创建一个局部变量
    $optional\u value2
    并将其值设置为
    test
    ,然后它通过
    test
    作为第二个参数,即
    $optional\u value1
    ,并保留第三个参数
    $optional\u value2
    作为默认值(
    default2
    )。看看我的重复链接,它展示了如何使用不依赖于顺序的数组来获得灵活的默认参数。我后来意识到了这一点,正如我在@Baba的回答中所说的。我明白了。我想我知道我在做什么,以及为什么它会起作用。当传递参数时,我实际上是给变量赋值,它返回
    true
    true
    值作为第二个参数传递给函数。谜团解开了,这也是PHP不如Python的另一个原因。PHP不如Python。。如果你只知道自己在做什么,那就太棒了。。。其他语言也是一样如果你愿意,我们可以把讨论转移到聊天上,但我这么说的原因是,与其他语言相比,PHP是有限的,所以你可能知道你在做什么,但在PHP中你仍然可以得到10行代码,而在其他语言中,它可以用2行完成。。。。你有权讨论你的选择这对Python来说太糟糕了