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:函数参数的动态默认值的主要内容,如果未能解决你的问题,请参考以下文章