我有这个问题,但我不知道如何命名,例如,我有这个功能,
function test($param1,$param2 = false,$param3 = false)
{
if($param2 == true)
{
return '2';
}
elseif($param3 == true)
{
return '3';
}
else
{
return '1';
}
}
为了返回'3',我必须像这样唤起我的功能,
$test = test('test',false,true);
我想问一下我是否可以跳过第二个参数并通过唤起这样的函数返回'3'?
$test = test('test',$param3 = true);
还是其他任何方法?
答案 0 :(得分:4)
您可以伪造命名参数,如SO:
所示Emulating named function parameters in PHP, good or bad idea?
以下是您应在此页面上寻找的正确答案的示例:
function myFunc (array $args) {
$default = array(
"name" => "John Doe",
"age" => "30"
);
// overwrite all the defaults with the arguments
$args = array_merge($defaults, $args);
// you *could* extract($args) here if you want
echo "Name: " . $args['name'] . ", Age: " . $args['age'];
}
myFunc(array("age" => 25)); // "Name: John Doe, Age: 25"
答案 1 :(得分:1)
您可以传递数组中的参数:
$params = array(
'param1' => 'test',
'param3' => true
);
$result = myFunction($params);
function myFunction($params) {
if (isset($params['param3']) && $params['param3']) {
return 3;
}
}
答案 2 :(得分:0)
您可以为这样的参数设置默认值:
function someFunction( $varA, $varB=false, $varC=false)
{
if($varB==true)
{
return 'b';
}
}
调用此功能时,您可以执行someFunction(true)
,someFunction(true, true)
或someFunction(true, true, true)
。唯一的问题是你不能在没有声明B的情况下声明A和C.
编辑: 错过了第一线。您也可以将变量作为数组传递。
答案 3 :(得分:0)
不,没有办法做到这一点。如果要将$ param3传递给函数,则必须在函数签名中传递$ param3之前的所有参数。
答案 4 :(得分:0)
不,你不能。 “跳过”参数的唯一方法是发送类似我想问一下我是否可以跳过第二个参数并通过唤起这样的函数返回'3'?
NULL
的内容。但是你的功能需要看起来像:
function foo($a, $skip_me = NULL, $b = 1);
{
if ($skip_me === NULL) $skip_me = false; // set the default value like this
}
foo(1, NULL, 2);
另一个选项是发送一个数组并使该函数采用单个参数。如果你有很多可选参数,这可能很有用。