PHP匿名函数(Anonymous functions),又称为闭包(Closure)
简介在学习Laravel核心代码的时候,在容器注册的过程中,看到了Closure。平时在使用PHP的过程中,自己使用闭包还是比较少的,所以本文将介绍下PHP的闭包Closure。
PHP的闭包(Closure),其实也叫匿名函数。可以参考PHP的官方文档:http://www.php.net/manual/zh/functions.anonymous.php 匿名函数就是创建一个没有名称的函数,主要作为回调函数来进行使用。匿名函数目前是通过 Closure 类来实现的,需要学习Closure类的请前往:http://php.net/manual/zh/class.closure.php。
基本使用
1、闭包函数作为变量的值
//定义一个匿名函数,作为一个变量的值
$func = function () {
return 'Hello World';
};
//PHP 会自动把此种表达式转换成内置类 Closure 的对象实例
var_dump($func instanceof Closure);//结果输出:true,说明匿名函数目前是通过Closure 类来实现的
echo $func();//结果为 Hello world
2、闭包函数也可传递参数
//定义一个含有参数的匿名函数
$func = function ($string) {
return $string;
};
echo $func('Hello');//结果为:Hello
echo $func('World');//结果为:World
3、闭包函数可以从作用域中继承变量,但是必须使用use语言结构传递进去
$param = 'hello';
//在使用$param的时候,前面必须先定义该变量,否则会提示:Undefined variable: param
$func = function () use ($param) {
return $param;
};
echo $func();//输出hello
//这里改变param的值
$param = 'world';
echo $func();//输出hello,说明param值的改变不会对闭包函数中的值进行修改,如果需要对其进行修改,就需要传递引用
$param = 'Hello';
$func1 = function () use(&$param){
return $param;
};
echo $func1();//输出Hello
$param = "World";
echo $func1();//输出World
4、回调函数
//定义一个接收参数为闭包函数的方法
function testCallBack(Closure $callback)
{
return $callback();
}
$func = function () {
return 'Hello World';
};
//传递定义好闭包函数的变量进去
echo testCallBack($func);//输出:Hello World
//直接传递闭包进去
echo testCallBack(function (){
return 'Closure';
});//输出:Closure
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。
OpenCV-Python图像类型转换是用cv2.cvtcolor()函数,用于将图像从一个颜色空间转换为另一个颜色空间。它的参数包括输入图像、目标颜色空间和转换方式。例如,将RGB图像转换为灰度图像可以使用cv2.COLOR_RGB2GRAY作为转换方式。
《是妈妈是女儿》聚焦母女间未曾言明的爱意,以书信对话的形式呈现出各自的内心独白,表达彼此的牵挂。黄绮珊与希林娜依·高用跨越时空、打开心扉、深情对唱的形式,将天下母女爱的寄语化作心灵的倾诉。黄绮珊的每一句话,每一个字都演绎出了妈妈对女儿的爱,而希林依娜·高把女儿对妈妈的爱由不理解到理解再到感恩演绎得淋漓尽致。
最近在做Golang的web框架日志,想将一个请求的所有日志上都绑定一个请求ID,由于最初框架的搭建没有解耦好,所以很难在日志中输出请求ID。于是想到了能否用协程ID来记录一个对应的请求ID,然后进行获取。
用户管理和权限设置在Mysql中是比较常见的操作,本文主要记录在工作中如何来对这些进行操作,文档会持续更新
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题