详解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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
php 执行系统命令的方法
Jul 07 PHP
php常用的安全过滤函数集锦
Oct 09 PHP
php跨服务器访问方法小结
May 12 PHP
PHP缓冲区用法总结
Feb 14 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 PHP
TP5框架实现签到功能的方法分析
Apr 05 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 define()函数及defined()函数使用详解
2013/06/09 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
浅谈Python中数据解析
2015/05/05 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
Python调用.NET库的方法步骤
2019/12/27 Python
Python 实现集合Set的示例
2020/12/21 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
应用电子专业学生的自我评价
2013/10/16 职场文书
后勤工作职责
2013/12/22 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
社区护士演讲稿
2014/08/27 职场文书
小鞋子观后感
2015/06/05 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
SpringBoot集成Redis的思路详解
2021/10/16 Redis