zoukankan      html  css  js  c++  java
  • 闭包(匿名函数) php

    php中的闭包,之前不理解。以前项目中虽然有用到,也是别人怎么用,自己也跟着怎么用,也没具体去看一下,时间长了就忘了,也不知道闭包是怎么回事。今天网上搜集了关于php闭包相关的文章,看了7,8篇,干货不多,大都复制粘贴党,现在根据自己的理解小结一下

    闭包支持版本

    根据官方文档里说的closure是5.3.0之后才支持以及很多文章说php是5.3.0之后才引入的,也没亲自验证过,暂时就理解为php版本大于5.3.0才有了闭包概念,支持闭包。

    语法

    函数:function func ($arg = xxx) {xxx};

    匿名函数: 没有函数名的函数 比如 function($arg = xxx){xxx};

    闭包:匿名函数加上use用法 比如 function($arg = xxx)use ($a, $b) {xxx};

    对比

    函数:相关语句块的集合,可以根据传入的条件完成一个小功能。

    匿名函数:虽然有了函数,但是函数起名字是一件较麻烦的事,且在同一命名空间下,函数命名有可能出现重复。一旦出现重复,程序就会报错。所以有了匿名函数。

    闭包:匿名函数的增加版,添加了use用法,申明时获取上下文内容,而不是调用时才获取。

    闭包优点

    网上说闭包有减少foreach,减少函数参数,减少递归等好处,感觉这些和闭包关系不大。个人认为,闭包带来的最大好处在于use。

    php中变量有引用一说(其他语言中也有类似的说法),use中的变量存放的可能是一个变量的值拷贝,也可能是一块内存地址(类似于c语言中的指针)

    use中变量存放引用(内存地址)比较好的例子计数器,简易代码如下

    $start = 0;

    $funcCount = function () use (&$start) {$start++; return $start;};

    unset($start);

    以上3行代码就定义了一个简单的计数器,变量start销毁后,由于闭包中有对start的引用,所以start之前指向的内存地址不会被回收,此时这块内存地址就脱离程序的掌控,通过$funcCount()可以访问到这块内存,执行计数操作并返回,该地址中的值修改常理来说只会被该匿名函数修改,不会被其他程序误改。

    暂时就说到这里,有不对的地方,欢迎批评指正,共同进步

  • 相关阅读:
    Hive UDF 用户自定义函数 编程及使用
    Hive 常用命令和语句
    Hive 配置显示表头和数据库信息
    Hive 安装配置
    Hadoop完全分布式集群环境搭建
    Java 文件切割工具类
    MongoDB 安装配置
    NodeJS 安装配置
    Java 截屏工具类
    Maven 配置本地依赖jar
  • 原文地址:https://www.cnblogs.com/peter-yan/p/6763384.html
Copyright © 2011-2022 走看看