详解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&amp;&amp;mysql)四
Oct 09 PHP
15种PHP Encoder的比较
Apr 17 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
php动态生成版权所有信息的方法
Mar 24 PHP
PHP下载生成的csv文件及问题总结
Aug 06 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 21 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP正则表达式之RCEService回溯
Apr 11 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的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php中Smarty模板初体验
2011/08/08 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python写入CSV文件的方法
2015/07/08 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
python基于Selenium的web自动化框架
2019/07/14 Python
Python hashlib模块实例使用详解
2019/12/24 Python
通过Python实现一个简单的html页面
2020/05/16 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
高三语文教学反思
2014/01/15 职场文书
2014年三万活动总结
2014/04/26 职场文书
节能环保口号
2014/06/12 职场文书
民族学专业求职信
2014/07/28 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers