一、介绍
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
二、使用场景
1、动态调用静态类的时候
1 2 3 4 5 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' ); |
2、在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 ?> |
3、赋值给一个普通的变量
1 2 3 4 5 6 7 8 9 |
<?PHP $greet = function ( $name ) { printf( "Hello %s\r\n" , $name ); }; $greet ( 'World' ); $greet ( 'PHP' ); ?> |
4、使用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 (); |
5、传递参数
1 2 3 4 5 |
<?PHP $example = function ( $arg ) use ( $message ) { var_dump( $arg . ' ' . $message ); }; $example ( "hello" ); |
6、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(); |
7、函数中的调用
1 2 3 4 5 6 7 8 |
<?PHP function call( $callback ){ $callback (); } call( function () { var_dump( 'hell world' ); }); |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。