php值callback类型和匿名函数(闭包)
callback、callable类型
自PHP5.4起可以使用callable类型制定回调类型callback。
本文档基于同样理由使用callback类型信息。
一些函数如call_user_func()或者usort()可以接受用户自定义的回调函数作为参数,回调函数不不止可以是简单的函数,
还可以是对象的方法,包括静态类方法。
传递???????????
PHP是将函数已string形式传递的。keyi9使用任何内置或者用户自定义函数,但除了语言结构例如:array、echo、empty、eval、exit、isset、list、print、unset。
一个已实例化的object的方法被作为array传递。小标0包含该object,下标1包含方法名。
在同一个类里面可以访问projected和private方法。
静态类方法也可不经实例化该类的对象而传递。只要在下标0中包含类名而不是对象。自PHP5.2.3起,也可以传递"类型::方法名"
除了普通的用户自定义函数外,也可以传递匿名函数给回调函数。
call_user_func();
匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数。
最经常用作回调函数(callback)参数的值。当然,也有其他应用的情况。
匿名函数示例
echo preg_replace_callback('~-([a-z])~', function ($match) {
return strtoupper($match[1]);
}, 'hello-world');
// 输出 helloWorld
闭包函数也可以作为变量的值来来使用。PHP会自动把此种表达式转化成内置类Closure的对象实例,。把一个closure
对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最好也要加上分号;
匿名函数变量赋值示例
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
call_user_func($greet);
闭包可以从父作用域中继承变量。
任何此类变量都应该用use 语言结构传递进去。PHP7,1起,不能传入此类变量。
superglobals。$this或者和参数重名。
这些变量都必须在函数或者类的头部声明,从父作用域中继承变量与使用全局变量是不同的。
全局变量存在于一个全局的范围,
无论当前在执行的是那个函数,而闭包的父作用域是定义该闭包的函数(不一定是调用它的函数)。
示例如下:
php值callback类型和匿名函数(闭包)的更多相关文章
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- PHP匿名函数(闭包)
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值.当然,也有其它应用的情况. ...
- php : 匿名函数(闭包) [二]
摘自: http://www.cnblogs.com/yjf512/archive/2012/10/29/2744702.html php的闭包(Closure)也就是匿名函数.是PHP5.3引入的. ...
- Go语言 - 函数 | 作用域 | 匿名函数 | 闭包 | 内置函数
函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 介绍 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数可以赋值给变量 函数 ...
- PHP函数(六)-匿名函数(闭包函数)
匿名函数能够临时创建一个没有名称的函数,常用作回调函数参数的值 <?php $test = function($a){ echo "Hello,".$a; }; $test( ...
- php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法
1.认识 __set (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...
- php : 匿名函数(闭包) [一]
摘自: http://www.cnblogs.com/starlion/p/3894578.html 一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous fu ...
- javascript匿名函数 闭包
匿名函数 (function(){ console.info("111111111"); })(); var my = (fun ...
- JS匿名函数&闭包
<html> <head> <title> test </title> </head> <body> <script ty ...
随机推荐
- 2D空间中求两圆的交点
出处:https://stackoverflow.com/questions/19916880/sphere-sphere-intersection-c-3d-coordinates-of-colli ...
- Atitit 项目文档规范化与必备文档与推荐文档列表
Atitit 项目文档规范化与必备文档与推荐文档列表 ===========比较重要的必备文档========== 项目组名单通讯录( 包括项目组,客户沟通人等 需求文档 原型ui文档 开发计划表 项 ...
- 使用 .toLocaleString() 轻松实现多国语言价格数字格式化
用代码对数字进行格式化,显然不是逢三位加逗号这么简单.比如印度在数字分位符号上的处理,就堪称业界奇葩: 印度的数字读法用“拉克”(十万)和“克若尔”(千万),数字标法用不对称的数位分离,即小数点左侧首 ...
- 自己实现字符串转整数(不使用JDK的字符串转整数的方法)
[需求]: (1)如果输入的字符串为null,为空,或者不是数字,抛出异常: (2)如果输入的数字超出int的最大值或最小值,抛出异常: (3)输入的数字允许以+或-号开头,但如果输入的字符串只有&q ...
- 前台报错:Uncaught TypeError: Cannot read property '0' of null
错误现象: var div1=mycss[0].style.backgroundColor; //这一行提示360和chrome提示:Uncaught TypeError: Cannot read ...
- 【iCore4 双核心板_ARM】例程十九:USBD_MSC实验——虚拟U盘
实验步骤: 1.将SD卡插在SD卡槽中. 2.将跳线冒跳至USB_OTG,将USB_OTG通过Micor USB线与USB主机(电脑)相连. 3.烧写程序,我的电脑中将出现一个磁盘. 实验现象: 核心 ...
- 【GMT43智能液晶模块】例程三:CAN通信实验
实验原理: STM32F429自带有CAN通信接口,本例程通过CAN1与芯片SN65HVD230相连 实现CAN通信,通过回环测试以验证CAN通信功能. 实验现象: 源代码下载链接: 链接:http: ...
- pip离线安装软件包
1. 首先一台主机上安装所有python包,然后运行如下命令下载依赖包: pip freeze > requirements pip download -r requirements 当然可以在 ...
- hdoj:2045
#include <iostream> using namespace std; ]; int main() { int n; a[] = ; a[] = ; a[] = ; ; i &l ...
- Java如何根据主机名(域名)获取IP地址?
在Java编程中,如何根据主机名(域名)获取IP地址? 以下示例显示了如何通过net.InetAddress类的InetAddress.getByName()方法将主机名更改为指定的IP地址. pac ...