php匿名函数

php匿名函数

匿名函数。也叫闭包函数,允许临时创建一个没有指定名称的函数。最经常用作回调函数参数的值。当然,也有其他应用的情况。
匿名函数目前是通过Closure类来实现的。

匿名函数示例:

1
2
3
4
5
6
<?php
echo preg_repllace_callback('~-([a-z])~', function($match){
return strtoupper($match[1]);
},'hello-world');
//输出 helloworld
?>

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

匿名函数变量赋值示例:

1
2
3
4
5
6
7
8
9
<?php
$gree = function($name);
{
print("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
?>

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

从父作用域继承变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?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");
?>

以上例子的输出类似于:

Notice: Undefined variable: message in /example.php on line 6
NULL
string(5) "hello"
string(5) "hello"
string(5) "hello"
string(5) "world"
string(11) "hello world"
-------------本文结束感谢您的阅读-------------
求打赏,多少都行
0%