在配置文件中使用closure作为数组值

时间:2015-08-04 14:33:15

标签: php laravel laravel-5

我有一个像这样的配置文件:

use Carbon\Carbon;

    return [
        'foo' => function() {
            return 1;
        },
        'date' => Carbon::now()->toDateString()
    ];

调用Config::get('file.foo')时,它返回以下内容而不是闭包的返回值。 :

 >>> Config::get('file.foo')
 => Closure {#39
      class: "Illuminate\Foundation\Bootstrap\LoadConfiguration",
      this: Illuminate\Foundation\Bootstrap\LoadConfiguration {#33 …},
      file: "/App/config/file.php",
      line: "6 to 8",    }

但是

Config::get('file.date');

返回

  >>> Config::get('file.date')
  => "2015-08-04"

为什么对类方法的调用已解决,但闭包不是<?p?

2 个答案:

答案 0 :(得分:2)

日期已解决,因为在配置文件中执行了Carbon的 toDateString() foo 未解决,因为您只需为 foo 指定一个闭包,因此 foo 的值是闭包。如果你希望 foo 等于闭包返回的值,你需要执行clojure。

答案 1 :(得分:0)

我知道这已经很晚了,但是,正如我刚遇到这个问题,这就是我所做的:

    return [
        'foo' => (function() {
            return 1;
        })(),
        'date' => Carbon::now()->toDateString()
    ];

这将当场评估封口。