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


use closure as array value in config file

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

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"

为什么对类方法的调用解决了,但闭包没有?

date被解析,因为Carbon的toDateString()在配置文件中执行。foo没有解析,因为您刚刚为foo分配了一个闭包,所以foo的值就是闭包。如果你想让foo等于闭包返回的值,你需要执行clojure。

我知道这有点晚了,但是,因为我刚碰到这个问题,这就是我所做的:

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

将当场计算闭包。