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-fpm 参数的深入理解
Jun 03 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
php+mysql数据库查询实例
Jan 21 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
PHP使用函数用法详解
Sep 30 PHP
PHP filesize函数用法浅析
Feb 15 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 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
模仿OSO的论坛(一)
2006/10/09 PHP
simplehtmldom Doc api帮助文档
2012/03/26 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
Jquery读取URL参数小例子
2013/08/30 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
几种响应式文字详解
2017/05/19 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
大学学习个人的自我评价
2014/02/18 职场文书
简单租房协议书
2014/04/09 职场文书
企业安全生产责任书
2014/04/14 职场文书
党内外群众意见范文
2015/06/02 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL