详解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入门学习的几个不错的实例代码
Jul 13 PHP
解析php中heredoc的使用方法
Jun 17 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
php简单socket服务器客户端代码实例
May 18 PHP
PHP中余数、取余的妙用
Jun 29 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
ThinkPHP删除栏目(实现批量删除栏目)
Jun 21 PHP
php实现微信企业转账功能
Oct 02 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 PHP
PHP的Trait机制原理与用法分析
Oct 18 PHP
php经典趣味算法实例代码
Jan 21 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
项目实践之javascript技巧
2007/12/06 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
js实现左右轮播图
2020/01/09 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
经典的班主任推荐信
2013/10/28 职场文书
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
大堂副理的岗位职责范文
2014/02/17 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
房屋质量投诉书
2015/07/02 职场文书