3

好的,所以我有一个带有 2 个强制参数的函数,然后它也必须有许多可选参数。

function example($a,$b, $username, $email) {
    // code
}

我的可选参数数据来自一个数组

$x = array('joeblogs', 'joe@blogs.com');

我将如何解析这些?请记住,该函数可能每次都需要解析一组不同的参数。

一个示例是使用 CakePHP,您可以指定所需的操作参数

4

5 回答 5

5

像这样的东西?

$a = 'a';
$b = 'b';
$x = array('joeblogs', 'joe@blogs.com');

$args = array_merge(array($a, $b), $x);

call_user_func_array('example', $args);

http://php.net/manual/en/function.call-user-func-array.php

于 2013-05-10T16:22:08.953 回答
1

可选参数有两种方法。

首先,您指定所有参数,如下所示:

function example($a, $b, $c=null, $d=null, $e=null)

参数$a$b是必需的。其他是可选的,null如果没有提供。此方法要求按指示的顺序指定每个可选参数。如果您只想使用 调用该方法$a$b并且$e必须为$cand提供空值$d

example($a, $b, null, null, $d);

第二种方法接受一个数组作为第三个参数。将检查该数组的键并根据找到的键进行处理:

function example($a, $b, $c=array()) {

    $optionalParam1 = ( !empty( $c['param1'] ) ) : $c['param1'] ? null;
    $optionalParam2 = ( !empty( $c['param2'] ) ) : $c['param2'] ? null;

通过这种方式,您可以检查可能提供的每个密钥。将为未填充的任何键提供空值。

于 2013-05-10T16:25:16.833 回答
0

要将数组参数传递给函数,您可以使用call_user_func_array

$args = array( 'foo', 'bar', 'joeblogs', 'joe@blogs.com' );
call_user_func_array( 'example', $args );

或者简单地传递任意数量的参数:

example( $a, $b, $username, $email );

要检索函数内部的参数,请使用func_get_args

function example() {
    $args = func_get_args();

    print_r( $args );

    // output:
    //  Array ( 
    //      [0] => foo 
    //      [1] => bar 
    //      [2] => joeblogs 
    //      [3] => joe@blogs.com 
    //  )

}
于 2013-05-10T22:24:59.123 回答
0

以下显示了可选参数和默认值的语法

function example($a,$b, $username = '', $email = '') {

}

另一种可能性是传递“可选值数组”

function example($a,$b, $optional_values = array()) {
    if($optional_values[0] != '') { blah blah .... }
}
于 2013-05-10T16:19:22.527 回答
0

该解决方案是您的建议和 Jez 的解决方案的合并。

call_user_func_array(array($controller, $action), $getVars);

$controller您的控制器的实例在哪里,$action是您要调用的操作的字符串,并且$getVars是一个参数数组。

函数的第一个参数call_user_func_array是回调。可以将方法调用定义为回调。

这是 PHP 回调文档的链接:http ://www.php.net/manual/pt_BR/language.pseudo-types.php#language.types.callback

于 2013-05-10T18:08:47.860 回答