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

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

<?php
$anonymousFunc = function($username){
echo $username;
};
$anonymousFunc("乔峰!");

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

<?php
function closureFunc(){
$anonymousFunc = function(){
echo "乔峰!";
};
$anonymousFunc();//普通函数内部调用了匿名函数
}
closureFunc();//输出: 乔峰

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

<?php

function closureFunc(){
$username = '乔峰';
$anonymousFunc = function() use($username){
echo $username;
};
$anonymousFunc();//此处调用了匿名函数
}
closureFunc();//输出: 乔峰

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

<?php

function closureFunc(){
$username = '乔峰';
$anonymousFunc = function() use($username){
echo $username;
};
return $anonymousFunc;// 函数返回匿名函数
}
$func = closureFunc();
$func(); //然后调用$func()

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

<?php

function closureFunc(){
$username = '乔峰';
$anonymousFunc = function($lover,$skill) use($username){
echo $username.$lover.$skill;
};
return $anonymousFunc;
}
$func = closureFunc();
$func("阿朱","擒龙手");//乔峰阿朱擒龙手

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

<?php

function closureFunc(){
$number = 100;
$anonymousFunc = function() use($number) {
$number++;
echo $number.PHP_EOL;
};
echo $number.PHP_EOL;
return $anonymousFunc;
}
$func = closureFunc();// 这里输出1,直接调用本函数的 echo $number.PHP_EOL; 即为100
$func();// 调用函数的返回值 $anonymousFunc $number++ 即为101
$func(); //
$func();//

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

<?php

function closureFunc(){
$number = 100;
$anonymousFunc = function() use(&$number) {
$number++;
echo $number.PHP_EOL;
};
echo $number.PHP_EOL;
return $anonymousFunc;
}
$func = closureFunc();// 这里输出1,直接调用本函数的 echo $number.PHP_EOL; 即为100
$func();// 调用函数的返回值 $anonymousFunc $number++ 即为101
$func(); //
$func();//

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

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

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

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. lodash 实现一些常见的功能

    排序 const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]); 数组切片 普通的 slice 可传递两个参数 ...

  2. ubuntu显卡驱动安装

    1.确定显卡型号 网上有些使用lspci | grep -i nvidia可以查看显卡型号,但是我的好像查不到具体型号,如下图. 但是后来我知道了安装的是1080Ti,所以也就明确了型号.驱动在(ht ...

  3. 小甲鱼Python3笔记

    000-愉快的开始 入门容易,学习难,代码量少. 跨平台: Windows, Mac OS, Linux, UNIX. 应用领域: 操作系统 WEB 3D动画 企业应用 云计算等等. 001-我和Py ...

  4. cadence元件放置方法

    在导入网表之后,需要放置元件,介绍几种常见的放置元件的方法和常用的几种元件操作方法.

  5. 解决Android Studio 将String类型保存为.txt文件,按下button跳转到文件管理器(解决了保存txt文件到文件管理后,手机打开是乱码的问题)

    不知道为什么保存文件后之前打开一直都OK,就突然打开看到变成乱码了,最后解决了 关键:outStream.write(finalContent.getBytes("gbk")); ...

  6. Spring源码工程导入Eclsipse缺少两个jar文件

    按照<Spring源码深度解析>所述,使用gradle cleanidea eclipse将Spring源码转为eclipse工程后,导入eclipse,最后发现还是缺少spring-cg ...

  7. 算法与数据结构(七) AOV网的拓扑排序(Swift版)

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  8. 怎么使用zepto.js的tap事件引起的探索

    前言:   在使用zepto.js之前,你首先要知道它是什么?为什么要使用它?以及它和jquery有什么区别? ①:简单来说zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与j ...

  9. [Swift]LeetCode127. 单词接龙 | Word Ladder

    Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest t ...

  10. [Swift]LeetCode219. 存在重复元素 II | Contains Duplicate II

    Given an array of integers and an integer k, find out whether there are two distinct indices i and j ...