详解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 HTML代码串 截取实现代码
Jun 29 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
两种设置php载入页面时编码的方法
Jul 29 PHP
PHP多文件上传类实例
Mar 07 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 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 Memcached应用实现代码
2010/02/08 PHP
php中session使用示例
2014/03/29 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
限制复选框的最大可选数
2006/07/01 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
Python中请使用isinstance()判断变量类型
2014/08/25 Python
python实现统计代码行数的方法
2015/05/22 Python
Python中的类与类型示例详解
2019/07/10 Python
python实现12306登录并保存cookie的方法示例
2019/12/17 Python
python中字典增加和删除使用方法
2020/09/30 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
特色蛋糕店创业计划书
2014/01/28 职场文书
法学求职信
2014/06/22 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
党员民主评议总结
2014/10/20 职场文书
大学生个人学习总结
2015/02/15 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
建党伟业电影观后感
2015/06/01 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
放飞理想主题班会
2015/08/14 职场文书
2016入党心得体会范文
2016/01/06 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python