如何将表达式用作参数默认值?

时间:2017-01-07 11:49:32

标签: php function laravel

我使用Laravel框架。我还有一个名为my.php的文件,其中包含我所有网站的配置。它看起来像:

<?php

return [

    'server' => [
        'root_path' => 'Z:\\',
    ],

    /* 
     * Website Status:
     * 0 = debugging mode
     * 1 = using mode
     */
    'status' => [
        'mode' => 0,
    ],

];

注意my.php文件已进入config文件夹。所以我可以使用config()函数来访问该文件的任何值:

echo config(my.status.mode);
//=>0

我的问题:我需要使用config(my.status.mode)作为函数的参数默认值。像这样:

public function ( $m = config(my.status.mode) ){
    // do stuff
}

如你所知,它抛出:

  

语法错误,意外'(',期待')'

我的IDE也会抛出:

  

不允许表达式作为参数默认值

现在我正在寻找一种方法来实现它。我可以这样做:

public function ( $m = null ){

    $m = is_null ( $m ) ? config(my.status.mode) : $m;

    // do stuff
}

但那不干净..还有更好的选择吗?

1 个答案:

答案 0 :(得分:0)

这是不可能的,但如果您在PHP 7中寻找更精简的解决方案,则可以使用新的??运算符:

echo $m ?? config('my.status.mode');

作为替代,you can create your own global Laravel helperconfig()帮助器的包装器,它将检查变量为null并将从config返回结果:

$m = default('status.mode', $m);

助手可能如下所示:

if (! function_exists('default')) {
    function default($config, $value)
    {
        return is_null($value) ? config('my.'.$config) : $value;
    }
}

此方法的一个优点是您可以随时向此帮助程序添加一些功能。例如,您可以将配置值转换为当前语言,而无需在控制器或模型中执行此操作。