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语法(3)
Oct 09 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
如何让搜索引擎抓取AJAX内容解决方案
Aug 25 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
详解PHP归并排序的实现
Oct 18 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
PHP asXML()函数讲解
Feb 03 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 PHP
如何运行/调试你的PHP代码
Oct 23 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/11/20 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
php对称加密算法示例
2014/05/07 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
由document.body和document.documentElement想到的
2009/04/13 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
Python标准异常和异常处理详解
2015/02/02 Python
Flask数据库迁移简单介绍
2017/10/24 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
优秀村官事迹材料
2014/01/10 职场文书
学习十八大报告感言
2014/02/28 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
远程教育学习心得体会
2016/01/23 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
python开发制作好看的时钟效果
2022/05/02 Python