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' ); }); |