之前写过一篇闭包的使用(点击此处进入),这次深入汇总下php中匿名函数的深入用法和理解:

php中的匿名函数 也叫闭包函数 允许指定一个没有名称的函数。把匿名函数赋值给变量,通过变量来调用,举个简单的例子:

  1. <?php
  2. $anonymousFunc = function($username){
  3. echo $username;
  4. };
  5. $anonymousFunc("乔峰!");

技巧1:  将匿名函数放在普通函数中,也可以将匿名函数返回,:这样就构成了一个简单的闭包

  1. <?php
  2. function closureFunc(){
  3. $anonymousFunc = function(){
  4. echo "乔峰!";
  5. };
  6. $anonymousFunc();//普通函数内部调用了匿名函数
  7. }
  8. closureFunc();//输出: 乔峰

技巧2  在匿名函数中引用局部变量(这里要引用一个php的关键字 use)

  1. <?php
  2.  
  3. function closureFunc(){
  4. $username = '乔峰';
  5. $anonymousFunc = function() use($username){
  6. echo $username;
  7. };
  8. $anonymousFunc();//此处调用了匿名函数
  9. }
  10. closureFunc();//输出: 乔峰

技巧3  在普通函数中返回匿名函数

  1. <?php
  2.  
  3. function closureFunc(){
  4. $username = '乔峰';
  5. $anonymousFunc = function() use($username){
  6. echo $username;
  7. };
  8. return $anonymousFunc;// 函数返回匿名函数
  9. }
  10. $func = closureFunc();
  11. $func(); //然后调用$func()

技巧4 返回匿名函数并给匿名函数传参

  1. <?php
  2.  
  3. function closureFunc(){
  4. $username = '乔峰';
  5. $anonymousFunc = function($lover,$skill) use($username){
  6. echo $username.$lover.$skill;
  7. };
  8. return $anonymousFunc;
  9. }
  10. $func = closureFunc();
  11. $func("阿朱","擒龙手");//乔峰阿朱擒龙手

技巧5 使用闭包改变上下文引用的变量值

  1. <?php
  2.  
  3. function closureFunc(){
  4. $number = 100;
  5. $anonymousFunc = function() use($number) {
  6. $number++;
  7. echo $number.PHP_EOL;
  8. };
  9. echo $number.PHP_EOL;
  10. return $anonymousFunc;
  11. }
  12. $func = closureFunc();// 这里输出1,直接调用本函数的 echo $number.PHP_EOL; 即为100
  13. $func();// 调用函数的返回值 $anonymousFunc $number++ 即为101
  14. $func(); //
  15. $func();//

上面的输入结果,发现后面的两个func()均返回 101,值并未发生改变,如果要累积++效果, 只要加一个 & 引用符号就可以了(匿名函数内的修改也会影响外部变量),修改下:

  1. <?php
  2.  
  3. function closureFunc(){
  4. $number = 100;
  5. $anonymousFunc = function() use(&$number) {
  6. $number++;
  7. echo $number.PHP_EOL;
  8. };
  9. echo $number.PHP_EOL;
  10. return $anonymousFunc;
  11. }
  12. $func = closureFunc();// 这里输出1,直接调用本函数的 echo $number.PHP_EOL; 即为100
  13. $func();// 调用函数的返回值 $anonymousFunc $number++ 即为101
  14. $func(); //
  15. $func();//

技巧6 把匿名函数当作参数传递

  1. <?php
  2. //定义普通函数,anonymousFunc 为参数变量
  3. function myFunc($anonymousFunc){
  4. $anonymousFunc("乔峰");
  5. }
  6.  
  7. myFunc(function($username){ //这里调用普通函数,并把 匿名函数作为参数 传给了myFunc中的$anonymousFunc
  8. echo $username;
  9. });//输出 乔峰

目前整理的就这些了,欢迎留言补充。。。

PHP 匿名函数使用技巧的更多相关文章

  1. JavaScript中的匿名函数及函数的闭包

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...

  2. JavaScript中的闭包和匿名函数

    JavaScript中的匿名函数及函数的闭包   1.匿名函数 2.闭包 3.举例 4.注意 1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没 ...

  3. JavaScript 闭包系列二(匿名函数及函数的闭包)

    一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) {     return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...

  4. Javascript的匿名函数与自执行

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...

  5. JavaScript的匿名函数和模块化的使用方法

    对于开发人员来说,很多时候我们都会涉及到JavaScript的使用,而在使用过程中,最令人沮丧的就是变量没有相应的使用范围. 在开发中,对于任何变量.数组.函数.对象等,只要不在函数的内部,都会被默认 ...

  6. 20170713_js闭包/匿名函数/作用域

    js:闭包 var getNum; function getCounter() { var n = 1; var inner = function () {return n++; } console. ...

  7. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  8. 【转】JavaScript中的匿名函数及函数的闭包

    对闭包理解一直不甚明了,在此特转摘博文一篇以备查用. 原文地址:http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html 相关文章: ...

  9. 详谈JavaScript 匿名函数及闭包

    1.匿名函数函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这 ...

随机推荐

  1. Ubuntu16.04安装之后连不上无线网?有可能是Realtek rtl8822be的原因

    原以为昨天已基本写完在接触到Ubuntu以来遇到的所有问题了... 没想到今天去看有关ROS的资料时,居然无意间又看到了之前遇到的一个巨坑:安装完Ubuntu16.04之后,无线网用不了,根本无法连接 ...

  2. linux-Vim命令合集

    Vim命令合集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filena ...

  3. django(models)视图与html 简单的操作

    !数据提前写好 urls映射图 点击a标签之后

  4. sqlserver 电脑重启以后服务突然无法启动 报错

    可能是sql server 评估期已过  在升级中输入产品密钥试试

  5. 算法与数据结构(十二) 散列(哈希)表的创建与查找(Swift版)

    散列表又称为哈希表(Hash Table), 是为了方便查找而生的数据结构.关于散列的表的解释,我想引用维基百科上的解释,如下所示: 散列表(Hash table,也叫哈希表),是根据键(Key)而直 ...

  6. SIP协议搭建电信级VOIP/IM运营平台--架构篇(sip集群)

    移动互联网的发展为整个VOIP通信行业开拓了新的战场,一时间各类即时通信软件如雨后春筝般冒了出来,再一次创造了移动互联网的发展神话.SIP协议做为音视频通信的首选标准,应用也越来越广泛. ------ ...

  7. Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?

    在Java笔试面试中,经常会遇到代码题,今天我们就来看一则Java代码笔试题. 有如下代码: Class ReadOnlyClass { private Integer age=20; public ...

  8. SDL 开发实战(三):使用 SDL 绘制基本图形

    在上文 SDL 开发实战(二):SDL 2.0 核心 API 解析 我们讲解了SDL最核心的API,并结合Hello World代码了解了SDL渲染画面的基本原理. 本文我们来讲一下,如何使用SDL的 ...

  9. [Swift]LeetCode1031. 两个非重叠子数组的最大和 | Maximum Sum of Two Non-Overlapping Subarrays

    Given an array A of non-negative integers, return the maximum sum of elements in two non-overlapping ...

  10. NumPy 学习笔记(三)

    NumPy 数组操作: 1.修改数组形状 a.numpy.reshape(arr, newshape, order='C') 在不改变数据的条件下修改形状 b.numpy.ndarray.flat 是 ...