1、介绍php
匿名函数(Anonymous functions),也叫闭包函数(closures),容许 临时建立一个没有指定名称的函数。最常常用做回调函数(callback)参数的值。固然,也有其它应用的状况。闭包
2、使用场景ide
一、动态调用静态类的时候函数
1this 2url 3spa 4.net 5code 6继承 7 8 9 10 |
<?php class test { public static function getinfo() { var_dump(func_get_args()); } } call_user_func( array ( 'test' , 'getinfo' ), 'hello world' ); |
二、在callback函数中使用
1 2 3 4 5 6 7 8 |
<?php //eg array_walk array_map preg_replace_callback etc echo preg_replace_callback( '~-([a-z])~' , function ( $match ) { return strtoupper ( $match [1]); }, 'hello-world' ); // 输出 helloWorld ?> |
三、赋值给一个普通的变量
1 2 3 4 5 6 7 8 9 |
<?php $greet = function ( $name ) { printf( "Hello %s\r\n" , $name ); }; $greet ( 'World' ); $greet ( 'PHP' ); ?> |
四、使用use从父域中继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $message = 'hello' ; // 继承 $message $example = function () use ( $message ) { var_dump( $message ); }; echo $example (); // 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 (); |
五、传递参数
1 2 3 4 5 |
<?php $example = function ( $arg ) use ( $message ) { var_dump( $arg . ' ' . $message ); }; $example ( "hello" ); |
六、OO中的使用
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 |
<?php class factory{ private $_factory ; public function set( $id , $value ){ $this ->_factory[ $id ] = $value ; } public function get( $id ){ $value = $this ->_factory[ $id ]; return $value (); } } class User{ private $_username ; function __construct( $username = "" ) { $this ->_username = $username ; } function getUserName(){ return $this ->_username; } } $factory = new factory(); $factory ->set( "zhangsan" , function (){ return new User( '张三' ); }); $factory ->set( "lisi" , function (){ return new User( "李四" ); }); echo $factory ->get( "zhangsan" )->getUserName(); echo $factory ->get( "lisi" )->getUserName(); |
七、函数中的调用
1 2 3 4 5 6 7 8 |
<?php function call( $callback ){ $callback (); } call( function () { var_dump( 'hell world' ); }); |