详解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编实现程动态图像的创建代码
Sep 28 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
php的ddos攻击解决方法
Jan 08 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
PHP的PDO大对象(LOBs)
Jan 27 PHP
实例讲解PHP表单验证功能
Feb 15 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 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
FCKeditor的安装(PHP)
2007/01/13 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
Java中final关键字详解
2015/08/10 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
Javascript - HTML的request类
2006/07/15 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
python字符类型的一些方法小结
2016/05/16 Python
Flask之flask-session的具体使用
2018/07/26 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
python第三方库学习笔记
2020/02/07 Python
PyQt5实现登录页面
2020/05/30 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
搞笑婚礼主持词
2014/03/13 职场文书
《凡卡》教学反思
2014/04/09 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
自我工作评价范文
2015/03/06 职场文书
民事调解书范文
2015/05/20 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
Python实现简繁体转换
2021/06/07 Python
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL