laravel 中一段关于闭包的代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ma199385
V2EX    PHP

laravel 中一段关于闭包的代码

  •  
  •   ma199385 2017-11-23 15:10:35 +08:00 3418 次点击
    这是一个创建于 2890 天前的主题,其中的信息可能已经有所发展或是发生改变。
    public function share(Closure $closure) { return function ($container) use ($closure) { // We'll simply declare a static variable within the Closures and if it has // not been set we will execute the given Closurs to resolve this value // and return it back to these consumers of the method as an instance. static $object; if (is_null($object)) { $object = $closure($container); } return $object; }; } 
    这段代码中 static 有什么意义 
    5 条回复    2017-11-23 23:55:33 +08:00
    Junjunya
        1
    Junjunya  
       2017-11-23 15:27:25 +08:00
    注释已经写的很清楚了呀 就算不懂 ,谷歌或者百度翻译一下也能理解

    ```
    #我们只需在闭包中声明一个静态变量,如果它有
    #没有设置,我们将执行给定的闭包来解析这个值。
    #并将其返回给方法的这些消费者作为实例。
    ```

    static 就算设置静态变量的呀
    torbrowserbridge
        2
    torbrowserbridge  
       2017-11-23 15:33:16 +08:00
    防止重复 resolve $container
    ma199385
        3
    ma199385  
    OP
       2017-11-23 15:33:42 +08:00
    我现在理解了,刚才看的不全面,laravel 通过 bind 方法将某些 abstract 和 share 方法返回的闭包通过键值对的形式存储到 bindings 数组中,当再次调用该 abstract 时,不会在闭包中再次声明该对象,我之前想的错了角度
    ma199385
        4
    ma199385  
    OP
       2017-11-23 15:37:47 +08:00
    之前想成不同的 abstract 调用 share 时因为 return function 的原因,所以每次调用闭包时都会生成一次对象,所以此时 static 没有意义,但是忘了 bindings 数组的 abstract 的是会重复利用的
    GreatHumorist
        5
    GreatHumorist  
       2017-11-23 23:55:33 +08:00 via iPhone
    用函数作用域内的静态变量实现的单例模式
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3003 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 13:04 PVG 21:04 LAX 06:04 JFK 09:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86