匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

创建闭包

Example #1 匿名函数变量赋值示例(http://laravelacademy.org/post/4341.html)

<?php
$fun = function($name){
printf("Hello %s\r\n",$name);
};
echo $fun('Tinywan');
echo $fun('Github');

打印结果:

Tinywan
Github

闭包和普通的PHP函数很像:常用的句法相同,也接受参数,而且能返回值。不过闭包没有函数名。

注:我们之所以能调用$greet变量,是因为这个变量的值是一个闭包,而且闭包对象实现了__invoke()魔术方法,只要变量名后有(),PHP就会查找并调用__invoke方法。

  我们通常把PHP闭包当做函数会方法的回调使用,事实上,很多PHP函数都会用到闭包,比如array_map和preg_replace_callback,这是使用PHP匿名函数的绝佳时机。记住,闭包和其他值一样,可以作为参数传入其他PHP函数:

$numberPlusOne = array_map(function ($number) {
return $number +=1;
}, [1, 2, 3]);
print_r($numberPlusOne);
function demo1(){
function a(){
echo 'a Function'."\r\n";
}
function b(){
echo 'b Function';
}
}
//a() 这样是不可以的,直接报错
demo1(); //demo()1调用了,a()函数就可以调用了,
a();

在函数内部定义一个匿名函数,同时使用匿名函数,(这可不是闭包哦!!)

function funDemo(){
$demo = function($str){
echo $str;
};
//调用匿名函数,在这里调用是OK的!
$demo('Tinywan');
}
funDemo(); //OK!
$demo('Github'); //尝试调用匿名函数,发生错误!

错误信息:

Fatal error: Uncaught Error: Function name must be a string in E:\wamp64\www\php-net\function\Example#2.php on line 32
Error: Function name must be a string in E:\wamp64\www\php-net\function\Example#2.php on line 32

function funDemo(){
$str1 = 100; //外部函数变量
$str2 = 200;
//闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。
$demo = function() use ($str1,$st){
echo $str1."\r\n";
echo $str2;
};
$demo("Tinywan");
}
funDemo(); //OK!

打印结果:100 200

PHP基础知识之————匿名函数(Anonymous functions)的更多相关文章

  1. php中的匿名函数(Anonymous functions)和闭包函数(closures)

    一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...

  2. Js基础知识6-JavaScript匿名函数和闭包

    匿名函数 1,把匿名函数赋值给变量 var test = function() { return 'guoyu'; }; alert(test);//test是个函数 alert(test()); 2 ...

  3. 闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别

    闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别 函数最常见的形式是具名函数(named function): function foo(){ con ...

  4. JavaScript基础---作用域,匿名函数和闭包

    匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...

  5. JavaScript基础---作用域,匿名函数和闭包【转】

    匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...

  6. python基础-基础知识(包括:函数递归等知识)

    老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, ", [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有 ...

  7. js基础知识之_函数

    javascript函数 函数概念 将完成某一特定功能的代码集合起来,可以重复使用 白话函数理解-函数就是一个工厂,帮大家实现某一个功能 优点 -时程序更加简洁 -逻辑更有条例 -调用方便 -维护更加 ...

  8. Python基础知识5-递归函数、生成器

    函数执行流程* 递归Recursion 递归的性能  递归总结 递归练习: def fac(n): if n==1: return n return n*fac(n-1) def fac1(n, f= ...

  9. go语言基础之基匿名函数本语法和闭包

    一.匿名函数 示例1: package main import "fmt" func main() { a := 10 str := "mike" //匿名函数 ...

随机推荐

  1. “吃神么,买神么”的第一个Sprint计划

    一.现状 我们这个团队刚接触网络网站的制作,前台后台的链接,数据库链接等还刚刚了解,在制作过程中药边学习边制作. 持着一个尽力做的心. 二.部分需求索引卡 主要的任务是把我们的主页面先大概做出来 三. ...

  2. 团队作业5-Alpha版本测试报告(彼岸芳华队)

    请根据团队项目中软件的需求文档.功能说明.系统设计和测试计划,写出软件的测试过程和测试结果,并回答下述问题. 一.在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个?(10分) 在测试过程 ...

  3. VS团队资源管理器(VS自带git)使用说明_使用VS自带git推送到远程存储库

    使用git存储库是相当好的习惯,每次码完代码就推送到远程存储库,万一不小心把本地代码搞废了,或者硬盘坏了,或者中了勒索病毒,本地代码丢失了还能从服务器上下载.我曾经就中了一次勒索病毒,本地电脑上的所有 ...

  4. Scrum Meeting Beta - 6

    Scrum Meeting Beta - 6 NewTeam 2017/12/5 地点:主南201 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了离线状态本地存储的读取Issue #133Pu ...

  5. mysql 数字类型的长度区别

    mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...

  6. Android 去掉标题全屏显示

    自己测试时出现无法实现去掉标题和全屏功能.最后发现只要public class SocketActivity extends Activity {} 而不能用ActionBarActivity. 先介 ...

  7. 浅析Web数据存储-Cookie、UserData、SessionStorage、WebSqlDatabase

    Cookie 它是标准的客户端浏览器状态保存方式,可能在浏览器诞生不久就有Cookie了,为什么需要Cookie 这个东东?由于HTTP协议没有状态,所以需要一个标志/存储来记录客户浏览器当前的状态, ...

  8. UVAlive4287_Proving Equivalences

    题意是告诉你有n个命题,m条递推关系,表示某个命题可以推出另外一个命题. 现在问你至少在增加多少个递推关系可以保证所有命题两两互推. 命题为点,关系为有向边,题目转化成为至少增加多少条有向边使得整个图 ...

  9. MachineLearning Exercise 4 :Neural Networks Learning

    nnCostFunction 消耗公式: a1 = [ones(m,) X]; z2 = a1*Theta1'; pre = sigmoid(a1*Theta1'); a2 = [ones(m,) p ...

  10. unix常用命令记录

    1. ls 命令:列出文件及文件夹 ls -a 列出目录下的所有文件,包括以 . 开头的隐含文件.ls -b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.ls -c 输 ...