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 相关文章推荐
PHP新手上路(十二)
Oct 09 PHP
php准确计算复活节日期的方法
Apr 18 PHP
php使用Jpgraph绘制饼状图的方法
Jun 10 PHP
PHP中Session和Cookie是如何操作的
Oct 10 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
学习PHP的数组总结【经验】
May 05 PHP
PHP生成word文档的三种实现方式
Nov 14 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
YII框架页面缓存操作示例
Apr 29 PHP
laravel框架语言包拓展实现方法分析
Nov 22 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单件模式结合命令链模式使用说明
2008/09/07 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
python爬虫实现获取下一页代码
2020/03/13 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
中科创达面试题
2016/12/28 面试题
ajax是什么及其工作原理
2012/02/08 面试题
函授自我鉴定
2013/11/06 职场文书
安全教育心得体会
2013/12/29 职场文书
小学生操行评语大全
2014/04/22 职场文书
小学捐书活动总结
2014/07/05 职场文书
教师节感谢信
2015/01/22 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android