PHP 匿名函数与注意事项详细介绍


Posted in PHP onNovember 26, 2016

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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
php判断是否为json格式的方法
Mar 04 PHP
discuz目录文件资料汇总
Dec 30 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
学习PHP session的传递方式
Jun 15 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
Yii全局函数用法示例
Jan 22 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 #PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 #PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 #PHP
Zend Framework上传文件重命名的实现方法
Nov 25 #PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 #PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 #PHP
php对接java现实加签验签的实例
Nov 25 #PHP
You might like
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
PHP多态代码实例
2015/06/26 PHP
js表格分页实现代码
2009/09/18 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
2018/10/09 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
使用python实现扫描端口示例
2014/03/29 Python
Python画图学习入门教程
2016/07/01 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
Python 在函数上添加包装器
2020/07/28 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
一套C#面试题
2013/10/09 面试题
活动总结书
2014/05/08 职场文书
高考励志标语
2014/06/05 职场文书
校园元旦活动总结
2014/07/09 职场文书
心术观后感
2015/06/11 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android