一、介绍
匿名函数(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' ); }); |
文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fangkang7/article/details/96426458
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)