好的,所以我有一个带有 2 个强制参数的函数,然后它也必须有许多可选参数。
function example($a,$b, $username, $email) {
// code
}
我的可选参数数据来自一个数组
$x = array('joeblogs', 'joe@blogs.com');
我将如何解析这些?请记住,该函数可能每次都需要解析一组不同的参数。
一个示例是使用 CakePHP,您可以指定所需的操作参数
像这样的东西?
$a = 'a';
$b = 'b';
$x = array('joeblogs', 'joe@blogs.com');
$args = array_merge(array($a, $b), $x);
call_user_func_array('example', $args);
可选参数有两种方法。
首先,您指定所有参数,如下所示:
function example($a, $b, $c=null, $d=null, $e=null)
参数$a
和$b
是必需的。其他是可选的,null
如果没有提供。此方法要求按指示的顺序指定每个可选参数。如果您只想使用 调用该方法$a
,$b
并且$e
必须为$c
and提供空值$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;
通过这种方式,您可以检查可能提供的每个密钥。将为未填充的任何键提供空值。
要将数组参数传递给函数,您可以使用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
// )
}
以下显示了可选参数和默认值的语法
function example($a,$b, $username = '', $email = '') {
}
另一种可能性是传递“可选值数组”
function example($a,$b, $optional_values = array()) {
if($optional_values[0] != '') { blah blah .... }
}
该解决方案是您的建议和 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