假设我有一个PHP函数foo:
function foo($firstName = 'john', $lastName = 'doe') { echo $firstName . " " . $lastName; } // foo(); --> john doe
有没有办法只指定第二个可选参数?
例:
foo($lastName='smith'); // output: john smith
Noah Goodric.. 32
PHP不支持函数本身的命名参数.但是,有一些方法可以解决这个问题:
使用数组作为函数的唯一参数.然后,您可以从数组中提取值.这允许在数组中使用命名参数.
如果要根据上下文允许可选数量的参数,则可以使用func_num_args和func_get_args,而不是在函数定义中指定有效参数.然后根据参数的数量,字符串长度等,您可以确定要执行的操作.
将null值传递给您不想指定的任何参数.没有真正解决它,但它的工作原理.
如果您正在使用对象上下文,则可以使用magic方法__call()来处理这些类型的请求,以便您可以根据传递的参数路由到私有方法.
ceejayoz.. 22
阵列技术的一种变体,可以更容易地设置默认值:
function foo($arguments) { $defaults = array( 'firstName' => 'john', 'lastName' => 'doe', ); $arguments = array_merge($defaults, $arguments); echo $arguments['firstName'] . ' ' . $arguments['lastName']; }
用法:
foo(array('lastName' => 'smith')); // output: john smith
Andrew G. Jo.. 9
你可以稍微重构你的代码:
function foo($firstName = NULL, $lastName = NULL) { if (is_null($firstName)) { $firstName = 'john'; } if (is_null($lastName )) { $lastName = 'doe'; } echo $firstName . " " . $lastName; } foo(); // john doe foo('bill'); // bill doe foo(NULL,'smith'); // john smith foo('bill','smith'); // bill smith
Bill Karwin.. 6
如果您有多个可选参数,则一种解决方案是传递一个哈希数组参数:
function foo(array $params = array()) { echo $params['firstName'] . " " . $params['lastName']; } foo(array('lastName'=>'smith'));
当然,在此解决方案中,无法验证散列数组的字段是否存在或拼写正确.完全由您来验证.
PHP不支持函数本身的命名参数.但是,有一些方法可以解决这个问题:
使用数组作为函数的唯一参数.然后,您可以从数组中提取值.这允许在数组中使用命名参数.
如果要根据上下文允许可选数量的参数,则可以使用func_num_args和func_get_args,而不是在函数定义中指定有效参数.然后根据参数的数量,字符串长度等,您可以确定要执行的操作.
将null值传递给您不想指定的任何参数.没有真正解决它,但它的工作原理.
如果您正在使用对象上下文,则可以使用magic方法__call()来处理这些类型的请求,以便您可以根据传递的参数路由到私有方法.
阵列技术的一种变体,可以更容易地设置默认值:
function foo($arguments) { $defaults = array( 'firstName' => 'john', 'lastName' => 'doe', ); $arguments = array_merge($defaults, $arguments); echo $arguments['firstName'] . ' ' . $arguments['lastName']; }
用法:
foo(array('lastName' => 'smith')); // output: john smith
你可以稍微重构你的代码:
function foo($firstName = NULL, $lastName = NULL) { if (is_null($firstName)) { $firstName = 'john'; } if (is_null($lastName )) { $lastName = 'doe'; } echo $firstName . " " . $lastName; } foo(); // john doe foo('bill'); // bill doe foo(NULL,'smith'); // john smith foo('bill','smith'); // bill smith
如果您有多个可选参数,则一种解决方案是传递一个哈希数组参数:
function foo(array $params = array()) { echo $params['firstName'] . " " . $params['lastName']; } foo(array('lastName'=>'smith'));
当然,在此解决方案中,无法验证散列数组的字段是否存在或拼写正确.完全由您来验证.