Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:函数的动态默认值';参数_Php_Function_Parameters_Default - Fatal编程技术网

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

PHP:函数的动态默认值';参数,php,function,parameters,default,Php,Function,Parameters,Default,我希望在Config类中保留选项,因此在更改(例如)MySQL数据库时不需要更改几个(相同的)值。到目前为止,我正在访问以下选项: Config::$credentials["mysql"]["username"] 现在,我想为函数设置一个“动态”默认值,但PHP不允许我这样做 public function get_single_db_entry($uid, $table=Config::$credentials["mysql"]["table"]) { // logic here.

我希望在Config类中保留选项,因此在更改(例如)MySQL数据库时不需要更改几个(相同的)值。到目前为止,我正在访问以下选项:

Config::$credentials["mysql"]["username"]
现在,我想为函数设置一个“动态”默认值,但PHP不允许我这样做

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

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

我认为这是不可能的。但是您可以为它呈现一个静态默认值,在第一行中,如果调用者未更改该值,您只需分配动态值

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

有一点变通方法,但应该可以使用。

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

$table = ValueResolver::resolve($table, Config::$credentials["mysql"]["table"]);
不要忘记使用namespace
使用LapaLabs\ValueResolver\Resolver\ValueResolver

还可以进行类型转换,例如,如果变量的值应为
整数
,请使用以下方法:

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

查看更多示例

为什么不为此使用常量?@llamerr我喜欢数组外观;)(但常量在这里也不起作用,是吗?)常量很好,为什么不呢?我还将其作为类常量进行了测试,但不能将类常量作为数组,所以需要一些其他的东西,比如在答案中