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正则走开
Mar 15 PHP
fleaphp crud操作之find函数的使用方法
Apr 23 PHP
解析php如何将日志写进syslog
Jun 28 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
PHP MSSQL 分页实例
Apr 13 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP封装curl的调用接口及常用函数详解
May 31 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与SQL注入攻击[一]
2007/04/17 PHP
CentOS安装php v8js教程
2015/02/26 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
python中的数组赋值与拷贝的区别详解
2019/11/26 Python
2019年.net常见面试问题
2012/02/12 面试题
大学生求职信范文应怎么写
2014/01/01 职场文书
给校长的建议书
2014/03/12 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
七一建党日演讲稿
2014/09/05 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
MySQL数据库 安全管理
2022/05/06 MySQL