详解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 批量更新网页内容实现代码
Jan 05 PHP
国外比较好的几个的Php开源建站平台小结
Apr 22 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
php获取远程文件内容的函数
Nov 02 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
php实现微信扫码支付
Mar 26 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
php向js函数传参的几种方法
2014/08/10 PHP
让您的菜单不离网站
2006/10/03 Javascript
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
JS实现简易图片自动轮播
2020/10/16 Javascript
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
Django 反向生成url实例详解
2019/07/30 Python
python实现FTP循环上传文件
2020/03/20 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
Python如何将模块打包并发布
2020/08/30 Python
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
公司庆典活动邀请函
2014/01/09 职场文书
高二历史教学反思
2014/01/25 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
文明城市标语
2014/06/16 职场文书
综合实践活动报告
2015/02/05 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
旅游安全责任协议书
2016/03/22 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书