2011-03-22 82 views
0

我有这个问题,但我不知道如何将它命名,例如,我有这个功能,跳过一个函数参数?

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

还是其他的方法呢?

回答

4

您可以假冒命名的参数,在这里看到这样:

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" 
+0

感谢。我认为它不应该是'$ defaults'的's'。该行应该是 - '$ args = array_merge($ default,$ args);' – laukok 2011-03-22 16:57:46

0

你可以为您的参数设置如下默认值:

function someFunction($varA, $varB=false, $varC=false) 
{ 
    if($varB==true) 
    { 
     return 'b'; 
    } 
} 

Whe ñ您称呼功能,您可以做someFunction(true)someFunction(true, true)someFunction(true, true, true)。唯一的问题是你不能申报A和C而不申报B。

编辑: 错过第一行。您也可以将您的变量作为数组传递。

0

不,没有办法做到这一点。如果要将$ param3传递给该函数,则必须传递函数签名中$ param3之前的所有参数。

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

另一种选择是发送一个数组,并使函数采取单个参数。如果你有很多可选的参数,这会很有用。

1

你可以传递参数数组:

$params = array(
    'param1' => 'test', 
    'param3' => true 
); 

$result = myFunction($params); 

function myFunction($params) { 
    if (isset($params['param3']) && $params['param3']) { 
     return 3; 
    } 
}