教程 > PHP教程 > PHP 函数 阅读:53

PHP 匿名函数

PHP 匿名函数(闭包函数)


匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数 callable参数的值。当然,也有其它应用的情况。

注意:理论上讲,闭包和匿名函数是不同的概念,不过 PHP 将其视作相同的概念,所以提到闭包时,指的就是匿名函数,反之亦然。

语法

function (参数列表) {
    ...
}

可以看出,匿名函数与普通函数非常类似,同样可以接受参数,并且可以有返回值,只是匿名函数在声明时会省略函数名。

示例 #1 匿名函数示例

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
?>

输出结果:

hello World

闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:

示例 #2 匿名函数变量赋值示例

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('迹忆客');
$greet('PHP');
?>

输出:

Hello 迹忆客
Hello PHP

从父作用域继承变量 USE

闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。

示例 #1

没有使用 use

<?php
$message = 'hello';
$example = function () {
    var_dump($message);
};
$example();

执行结果

Notice: Undefined variable: message in /example.php on line 6
NULL

对比下面使用 use 的示例

示例 #2

<?php
$message = 'hello';

$example();

// 继承 $message
$example = function () use ($message) {
    var_dump($message);
};
$example();

执行结果

string(5) "hello"

查看笔记

扫码一下
查看教程更方便