详解PHP匿名函数与注意事项


Posted in PHP onMarch 29, 2016

php5.3不但引进了匿名函数还有更多更好多新的特性了,下面我们一起来了解一下PHP匿名函数与注意事项,具体内容如下

PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束
PHP5.2:JSON 支持
PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar
PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改
PHP5.5:yield, list() 用于 foreach, 细节修改
PHP5.6:常量增强,可变函数参数,命名空间增强

 现在基本上都使用PHP5.3以后的版本,但是感觉普遍一个现象就是很多新特性,过了这么长时间,还没有完全普及,在项目中很少用到。 

看看PHP匿名函数:

'test' => function(){
  return 'test'
},

PHP匿名函数的定义很简单,就是给一个变量赋值,只不过这个值是个function。

以上是使用Yii框架配置components文件,加了一个test的配置。

什么是PHP匿名函数?

看官方解释:

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

匿名函数示例

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
 return strtoupper($match[1]);
}, 'hello-world');
// 输出 helloWorld
?>

闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:

匿名函数变量赋值示例

<?php
$greet = function($name)
{
 printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
?>

闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。

从父作用域继承变量

<?php
$message = 'hello'
// 没有 "use"
$example = function () {
 var_dump($message);
};
echo $example();
// 继承 $message
$example = function () use($message) {
 var_dump($message);
};
echo $example();
// Inherited variable's value is from when the function
// is defined, not when called
$message = 'world'echo $example();
// Reset message
$message = 'hello'
// Inherit by-reference
$example = function () use(&$message) {
 var_dump($message);
};
echo $example();
// The changed value in the parent scope
// is reflected inside the function call
$message = 'world'echo $example();
// Closures can also accept regular arguments
$example = function ($arg) use($message) {
 var_dump($arg . ' ' . $message);
};
$example("hello");
?>

php中的匿名函数的注意事项

在php5.3以后,php加入匿名函数的使用,今天在使用匿名的时候出现错误,不能想php函数那样声明和使用,详细看代码

$callback=function(){ 
 return "aa"; 
}; 
echo $callback();

打印出来是aa;

看下面的例子:

echo $callback(); 
$callback=function(){ 
 return "aa"; 
};

这时报错了!$callback为未声明,但是使用php自己声明的函数都不会报错的!

function callback(){ 
 return "aa"; 
} 
echo callback(); //aa 
 
echo callback(); //aa 
function callback(){ 
 return "aa"; 
}

这两个都打印出来aa;

在使用匿名函数的时候,匿名函数当做变量,须提前声明,js中也是这样的!!!!!

以上就是为大家介绍的PHP匿名函数与注意事项,希望对大家的学习有所帮助。

PHP 相关文章推荐
傻瓜化配置PHP环境――Appserv
Dec 13 PHP
dedecms系统常用术语汇总
Apr 03 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
PHP将XML转数组过程详解
Nov 13 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
php ajax实现文件上传进度条
Mar 29 #PHP
php $_SESSION会员登录实例分享
Jan 19 #PHP
PHP实现163邮箱自动发送邮件
Mar 29 #PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 #PHP
PHP创建word文档的方法(平台无关)
Mar 29 #PHP
PHP中key和current,next的联合运用实例分析
Mar 29 #PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 #PHP
You might like
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
python输出决策树图形的例子
2019/08/09 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
基于Python fminunc 的替代方法
2020/02/29 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
Python网页解析器使用实例详解
2020/05/30 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
PHP面试题及答案二
2015/05/23 面试题
介绍一下Linux文件的记录形式
2013/09/29 面试题
主管会计岗位职责
2014/03/13 职场文书
机电专业求职信
2014/06/14 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏