详解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代码优化及php相关问题总结
Oct 09 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
php通过字符串调用函数示例
Mar 02 PHP
一个经典的PHP文件上传类分享
Nov 18 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
php文件系统处理方法小结
May 23 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 15 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
brook javascript框架介绍
2011/10/10 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
python里对list中的整数求平均并排序
2014/09/12 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python实现图片拼接的代码
2018/07/02 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
设计总监岗位职责
2013/12/07 职场文书
客户经理岗位职责
2013/12/08 职场文书
简单而又朴实的个人求职信分享
2013/12/12 职场文书
银行职员思想汇报
2013/12/31 职场文书
给领导的检讨书
2014/02/16 职场文书
六五普法规划实施方案
2014/03/21 职场文书
专科生就业求职信
2014/06/22 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android