编程语言php 闭包的作用

public function __construct($config)
    {
    parent::__construct();
    $this['config'] = function () use ($config) {
        return new Config($config);
    };
    ...
    其中
    $this['config'] = function () use ($config) {
        return new Config($config);
    能不能直接写成这样:
    $this['config'] = new Config($config);
    有什么优势?

回复内容:

public function __construct($config)
    {
    parent::__construct();
    $this['config'] = function () use ($config) {
        return new Config($config);
    };
    ...
    其中
    $this['config'] = function () use ($config) {
        return new Config($config);
    能不能直接写成这样:
    $this['config'] = new Config($config);
    有什么优势?

惰加载。这两种写法都可以,但是。
$this['config'] = new Config($config);
这种方式,当你给$this->['config']赋值的时候,即进行了new Config($config)操作。

$this['config'] = function () use ($config) {
        return new Config($config);
}

这种方式,你只是给$this->['config']一个匿名函数,当你要用到的时候,才会进行new Config($config)的操作。

不知道我这种解释对不对= =比较不善表达= =

能不能直接写成这样:
$this['config'] = new Config($config);
有什么优势?

完全可以写成这样,只不过每次在实例化的时候都会去new Config这个类,并不管用不用的到;

$this['config'] = function () use ($config) {
        return new Config($config);
}

这种写法呢,是给$this['config']声明了一个匿名函数,当$this['config']被真正调用的时候才会去new Config这个类;

这样写的好处的是,当$this['config']不被真正使用时,减少了额外实例化的过程和内存的消耗

closure会在真正调用的时候才new一个Config, 这样就可以实现了lazy load.

除了上面的懒加载, 还有一个好处是实现了一个工厂模式 -- 每次拿config都是新new出来的

1、懒加载大家都说到了

2、其实匿名函数很大程度上函数式编程的一个体现

文章来源:https://www.php.cn/faq/342295.html

(0)

相关推荐

  • 构造函数以及析构函数在PHP中需要注意的地方

    构造函数以及析构函数在PHP中需要注意的地方 基本上所有的编程语言在类中都会有构造函数和析构函数的概念.构造函数是在函数实例创建时可以用来做一些初始化的工作,而析构函数则可以在实例销毁前做一些清理工作 ...

  • Yii Framework框架中事件和行为的区别及应用实例分析

    这篇文章主要介绍了Yii Framework框架中事件和行为的区别及应用,结合实例形式分析了Yii Framework框架中事件和行为的相关概念.原理.区别及应用操作技巧,需要的朋友可以参考下 本文实 ...

  • PHP自动加载学习记录

    PHP自动加载学习记录

  • 反序列化漏洞利用总结

    反序列化无论在CTF比赛中,抑或是实战渗透中都起着重要作用,而这一直都是我的弱项之一,所以写一篇反序列化利用总结来深入学习一下 <!-- more --> 简单介绍 (反)序列化只是给我们 ...

  • ecshop中出现Redefining already defined constructor for class

    本地PHP环境PHP5.4,安装ecshop2.7.3后,很多地方会报如下的错 Redefining already defined constructor for class XXX 检查代码可以发 ...

  • 通过几道CTF题学习Laravel框架

    安装:其中--prefer-dist表示优先下载zip压缩包方式 composer create-project --prefer-dist laravel/laravel=5.8.* laravel ...

  • 红枣的功效与作用

    红枣的功效主要是几个方面, 一是健脾益气,第二是养阴安神,第三能够调和药性.展开来讲它的作用,健脾益气方面,比如说脾气虚弱出现的纳呆.便溏.乏力这些表现的时候,它可以同党参.白术.茯苓等等一块入药,起 ...

  • 一级、二级、三级配电的作用以及用途

    我们做个假设:有一个新建的小区引进一条10kV进线,建了一个配电室,从变压器低压端出线0.4kV到配电柜(一级配电柜),再引出线到每栋楼的配电箱(二级配电箱),再出线到每个单元楼的配电柜(三级配电), ...

  • 穴位的作用

    青霉素的作用和主治.第一,是对由a组β溶血性链球菌引起的咽炎,猩红热,蜂窝织炎,化脓性的关节炎,肺炎,产褥热以及败血症,青霉素有较好的疗效,为首选药物:第二,适用于其他链球菌引起的感染,包括b组β溶血 ...

  • 密蒙花的功效与作用有

    使密蒙花,先拣令净,用酒浸泡一宿,出候干,却拌蜜润,蒸,至出,日干,如此拌蒸三度,又却日干用.每修事一两,用酒八两浸,待色变,用蜜半,蒸为度.密蒙花配伍枸杞子:密蒙花清肝养血,明目;枸杞子补肝肾而明目 ...

  • ACE2的正常生理作用与新冠病毒

        ACE2 的正常生理功能是在人体内起到调节血管.进而调节血压的作用,它的酶域位于细胞的表面,广泛的存在于人体器官组织内.病毒与ACE2 的结合,一方面,使ACE2不能发挥正常的生理功能-调节血 ...

  • 张锡纯寒解汤的作用功效、适应症、临床应用、组成医案方解

    [来源]<医学衷中参西录·治温病方>. [组成]生石膏一两,捣细知母八钱连翘一钱五分蝉蜕一钱五分,去足土 [用法]水煎服. [作用与功效]清热泻火. [主治适应症]周身壮热,心中热而且渴, ...

  • 青黛的功效与作用及禁忌

    青黛的功效与作用及禁忌 2019-12-09 16:10:44 朱爱华主任医师脑病3科北京中医药大学东直门医院三级甲等 中医认为青黛有清热解毒.凉血止血.定惊的功效,具有治疗温毒发斑,血热吐衄,胸痛咳 ...

  • 孩子缺乏自信, 并不一定是胆小懦弱, 家庭教育起很大的作用

    让孩子阳光快乐的长大相信是每一位家长共同的心愿.作为家长,我们希望自己的孩子每一天都可以洋溢着欢乐的笑脸,生活中充满着欢歌笑语.但是我们也会看到生活中有一些孩子不敢于表现自己,在陌生的环境中不敢说话, ...

  • 婴幼儿游泳馆装修要投多少钱?到底作用有多大

    大部分开婴儿游泳馆的店长,都要考虑自己门店的装修问题,如果加盟店能在品牌商的帮助下装修设计,自营店铺就要靠自己了.现在都说开店拼的是细节,装修设计也很重要,但是到底有多重要,很多人都说不上来,今天婴游 ...