详解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 Socket 编程
Apr 09 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
浅谈Laravel核心解读之Console内核
Dec 02 PHP
laravel实现前后台路由分离的方法
Oct 13 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中ob_start()函数的用法
2013/06/24 PHP
学习php分页代码实例
2013/10/24 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
javascript Keycode对照表
2009/10/24 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
vue实现登录功能
2020/12/31 Vue.js
python实现将元祖转换成数组的方法
2015/05/04 Python
python逆序打印各位数字的方法
2018/06/25 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
大学生学习党课思想汇报
2014/01/03 职场文书
仓库文员岗位职责
2014/04/06 职场文书
实验室的标语
2014/06/20 职场文书
门卫岗位职责
2015/02/09 职场文书
解决Redis启动警告问题
2022/02/24 Redis