【问题标题】:PHP: dynamic default value for functions' parametersPHP:函数参数的动态默认值
【发布时间】: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

标签: php function parameters default


【解决方案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 了解更多示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2011-04-09
      • 1970-01-01
      • 2020-03-17
      • 2010-11-28
      • 1970-01-01
      相关资源
      最近更新 更多