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 相关文章推荐
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
简单的php 验证图片生成函数
May 21 PHP
php 魔术方法使用说明
Oct 20 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 PHP
简单谈谈favicon
Jun 10 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
PHP与SQL语句常用大全
Dec 10 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 PHP
php redis setnx分布式锁简单原理解析
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常用字符串的总结(待续)
2013/06/07 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
Python reduce()函数的用法小结
2017/11/15 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
python中最小二乘法详细讲解
2021/02/19 Python
一份软件工程师的面试试题
2016/02/01 面试题
党的作风建设心得体会
2014/10/22 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
2015年宣传工作总结
2015/04/08 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
大学生入党群众意见书
2015/06/02 职场文书
结婚典礼主持词
2015/06/29 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python