匿名函数也叫闭包函数(closures允许创建一个没有指定没成的函数,最经常用作回调函数参数的值。
闭包函数没有函数名称,直接在function()传入变量即可 使用时将定义的变量当作函数来处理
1
2
3
4
|
$cl = function ( $name ){ return sprintf( 'hello %s' ,name); } echo $cli ( 'fuck' )` |
直接通过定义为匿名函数的变量名称来调用
1
2
3
|
echo preg_replace_callback( '~-([a-z])~' , function ( $match ) { return strtoupper ( $match [1]); }, 'hello-world' );` |
使用use
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
|
$message = 'hello' ; $example = function () use ( $message ){ var_dump( $message ); }; echo $example (); //输出hello $message = 'world' ; //输出hello 因为继承变量的值的时候是函数定义的时候而不是 函数被调用的时候 echo $example (); //重置为hello $message = 'hello' ; //此处传引用 $example = function () use (& $message ){ var_dump( $message ); }; echo $example (); //输出hello $message = 'world' ; echo $example (); //此处输出world //闭包函数也用于正常的传值 $message = 'hello' ; $example = function ( $data ) use ( $message ){ return "{$data},{$message}" ; }; echo $example ( 'world' ); |
example
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
|
class Cart{ //在类里面定义常量用 const 关键字,而不是通常的 define() 函数。 const PRICE_BUTTER = 1.00; const PRICE_MILK = 3.00; const PRICE_EGGS = 6.95; protected $products = []; public function add( $product , $quantity ){ $this ->products[ $product ] = $quantity ; } public function getQuantity( $product ){ //是否定义了 return isset( $this ->products[ $product ])? $this ->products[ $product ]:FALSE; } public function getTotal( $tax ){ $total = 0.0; $callback = function ( $quantity , $product ) use ( $tax , & $total ){ //constant 返回常量的值 //__class__返回类名 $price = constant( __CLASS__ . "::PRICE_" . strtoupper ( $product )); $total += ( $price * $quantity )*( $tax +1.0); }; //array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数 array_walk ( $this ->products, $callback ); //回调匿名函数 return round ( $total ,2); } } $my_cart = new Cart(); $my_cart ->add( 'butter' ,1); $my_cart ->add( 'milk' ,3); $my_cart ->add( 'eggs' ,6); print ( $my_cart ->getTotal(0.05)); |
以上就是关于PHP闭包函数的相关内容,希望对大家的学习有所帮助。