PHP 匿名函数使用技巧
之前写过一篇闭包的使用(点击此处进入),这次深入汇总下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 匿名函数使用技巧的更多相关文章
- JavaScript中的匿名函数及函数的闭包
1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...
- JavaScript中的闭包和匿名函数
JavaScript中的匿名函数及函数的闭包 1.匿名函数 2.闭包 3.举例 4.注意 1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没 ...
- JavaScript 闭包系列二(匿名函数及函数的闭包)
一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) { return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...
- Javascript的匿名函数与自执行
1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...
- JavaScript的匿名函数和模块化的使用方法
对于开发人员来说,很多时候我们都会涉及到JavaScript的使用,而在使用过程中,最令人沮丧的就是变量没有相应的使用范围. 在开发中,对于任何变量.数组.函数.对象等,只要不在函数的内部,都会被默认 ...
- 20170713_js闭包/匿名函数/作用域
js:闭包 var getNum; function getCounter() { var n = 1; var inner = function () {return n++; } console. ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- 【转】JavaScript中的匿名函数及函数的闭包
对闭包理解一直不甚明了,在此特转摘博文一篇以备查用. 原文地址:http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html 相关文章: ...
- 详谈JavaScript 匿名函数及闭包
1.匿名函数函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这 ...
随机推荐
- Linux一键安装宝塔控制面板
Linux一键安装宝塔的命令行 yum install -y wget && wget -O install.sh http://download.bt.cn/install/inst ...
- Java和js操作json
Js中 Json字符串转json对象 //将json格式的字符串转为json对象 var t = JSON.parse('{"name":123}'); alert(t.name) ...
- [微信小程序]编译.wxss出错,2 not found
小程序新建项目就出错:2 not found 编译.wxss文件出错(不是一般的郁闷,新建项目就报错...) 大概的情况是开发工具没有更新.或更新不到, 第一,可以删掉开发工具重新下载最新安装: 第 ...
- Python基础之面向对象思维解决游戏《天龙八部》
一.程序设计思维: 以面向对象的思维设计<天龙八部>游戏技能,使得技能效果在增加或者减少时,游戏技能整体框架不改变,仅仅增加或者减少技能效果 二.思路流程图如下: 三.变成框架实现代码: ...
- 查询Python版本
- iOS依赖库管理工具之Carthage
在iOS开发中,我们常会用CocoaPods来进行依赖库的管理.CoaoaPods 是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库,然后 CocoaPods 就会进行下载,集成 ...
- Redis API的原子性分析
在学习Redis的常用操作时,经常看到介绍说,Redis的set.get以及hset等等命令的执行都是原子性的,但是令自己百思不得其解的是,为什么这些操作是原子性的? 原子性 原子性是数据库的事务中的 ...
- [Swift]LeetCode107. 二叉树的层次遍历 II | Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- [Swift]LeetCode109. 有序链表转换二叉搜索树 | Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- [Swift]LeetCode928. 尽量减少恶意软件的传播 II | Minimize Malware Spread II
(This problem is the same as Minimize Malware Spread, with the differences bolded.) In a network of ...