PHP:函数参数的动态默认值

Posted

技术标签:

【中文标题】PHP:函数参数的动态默认值【英文标题】:PHP: dynamic default value for functions' parameters 【发布时间】:2012-04-26 13:03:22 【问题描述】:

我想将选项保留在 Config 类中,因此在更改(例如)mysql 数据库时不需要更改多个(相同的)值。到目前为止,我正在访问这些选项,例如:

Config::$credentials["mysql"]["username"]

现在,我想为函数设置一个“动态”默认值,但 php 不允许我这样做

public function get_single_db_entry($uid, $table=Config::$credentials["mysql"]["table"]) 
    // logic here...

我想知道的:是否有机会保持默认参数的值动态?

【问题讨论】:

为什么不使用常量呢? @llamerr 我喜欢数组的外观;)(但常量在这里也不起作用,对吧?) 常量工作正常,为什么不呢? codepad.org/EkLf19Lh 我也将其作为类常量进行了测试,但您不能将类常量作为数组,因此您需要其他内容,例如答案codepad.org/GfFvhiOa 【参考方案1】:

我认为这是不可能的。但是你可以给它渲染一个静态默认值,并且在第一行,如果调用者没有改变这个值,你只需分配一个动态值。

public function get_single_db_entry($uid, $table=0) 
    if $table == 0 
      $table = Config::$credentials["mysql"]["table"]
    // logic here...

有点解决方法,但应该可以。

【讨论】:

【参考方案2】:

在这种情况下,您可以使用我的小型库 ValueResolver,例如:

$table = ValueResolver::resolve($table, Config::$credentials["mysql"]["table"]);

别忘了使用命名空间use LapaLabs\ValueResolver\Resolver\ValueResolver;

还有类型转换的能力,例如如果你的变量的值应该是integer,那么使用这个:

$id = ValueResolver::toInteger('6 apples', 1); // returns 6
$id = ValueResolver::toInteger('There are no apples', 1); // returns 1 (used default value)

查看docs 了解更多示例

【讨论】:

以上是关于PHP:函数参数的动态默认值的主要内容,如果未能解决你的问题,请参考以下文章

函数进阶

函数里的普通参数指定参数默认参数动态参数的区别

python函数参数类型:位置参数默认参数动态参数

再遇函数

PHP函数

九函数 —— 参数