详解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 相关文章推荐
关于mysql 字段的那个点为是定界符
Jan 15 PHP
php中几种常见安全设置详解
Apr 06 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
解析crontab php自动运行的方法
Jun 24 PHP
PHP将XML转数组过程详解
Nov 13 PHP
php多重接口的实现方法
Jun 20 PHP
php根据生日计算年龄的方法
Jul 13 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
php+mysql实现无限级分类
Nov 11 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
php 广告点击统计代码(php+mysql)
Feb 21 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
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
php实现微信发红包功能
2018/07/13 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
Python中字符串对齐方法介绍
2015/05/21 Python
python读取二进制mnist实例详解
2017/05/31 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
python实现淘宝购物系统
2019/10/25 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
2014/03/31 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
物业工作计划书
2014/01/10 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
一夜的工作教学反思
2014/02/08 职场文书
个人整改措施书面材料
2014/10/24 职场文书
检讨书范文2000字
2015/01/28 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
房贷工资证明范本
2015/06/12 职场文书
升学宴学生致辞
2015/09/29 职场文书
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
TS 类型兼容教程示例详解
2022/09/23 Javascript