当前位置:  开发笔记 > 编程语言 > 正文

在PHP中指定可选参数值的任何方法?

如何解决《在PHP中指定可选参数值的任何方法?》经验,为你挑选了4个好方法。

假设我有一个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'));

当然,在此解决方案中,无法验证散列数组的字段是否存在或拼写正确.完全由您来验证.



1> Noah Goodric..:

PHP不支持函数本身的命名参数.但是,有一些方法可以解决这个问题:

    使用数组作为函数的唯一参数.然后,您可以从数组中提取值.这允许在数组中使用命名参数.

    如果要根据上下文允许可选数量的参数,则可以使用func_num_args和func_get_args,而不是在函数定义中指定有效参数.然后根据参数的数量,字符串长度等,您可以确定要执行的操作.

    将null值传递给您不想指定的任何参数.没有真正解决它,但它的工作原理.

    如果您正在使用对象上下文,则可以使用magic方法__call()来处理这些类型的请求,以便您可以根据传递的参数路由到私有方法.



2> ceejayoz..:

阵列技术的一种变体,可以更容易地设置默认值:

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



3> Andrew G. Jo..:

你可以稍微重构你的代码:

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



4> Bill Karwin..:

如果您有多个可选参数,则一种解决方案是传递一个哈希数组参数:

function foo(array $params = array()) {
    echo $params['firstName'] . " " . $params['lastName'];
}

foo(array('lastName'=>'smith'));

当然,在此解决方案中,无法验证散列数组的字段是否存在或拼写正确.完全由您来验证.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有