码迷,mamicode.com
首页 > Web开发 > 详细

php值callback类型和匿名函数(闭包)

时间:2018-07-26 18:42:55      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:变量赋值   方式   php7   实例化   自动   而不是   一个   func   isset   

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类型和匿名函数(闭包)

标签:变量赋值   方式   php7   实例化   自动   而不是   一个   func   isset   

原文地址:https://www.cnblogs.com/2018-05-9-ygk/p/9372597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!