本文實(shí)例講述了PHP回調(diào)函數(shù)及匿名函數(shù)概念與用法。分享給大家供大家參考,具體如下:
1、回調(diào)函數(shù)
PHP的回調(diào)函數(shù)其實(shí)和C、Java等語(yǔ)言的回調(diào)函數(shù)的作用是一模一樣的,都是在主線程執(zhí)行的過(guò)程中,突然跳去執(zhí)行設(shè)置的回調(diào)函數(shù);
回調(diào)函數(shù)執(zhí)行完畢之后,再回到主線程處理接下來(lái)的流程
而在php調(diào)用回調(diào)函數(shù),不想c以及java那樣直接使用函數(shù)名作為函數(shù)參數(shù),而是在php中使用函數(shù)對(duì)應(yīng)的字符串名稱(chēng)執(zhí)行
1.1、無(wú)參數(shù)回調(diào)
04 | echo 'execute no parameters callback.<br/>' ; |
06 | function main( $callback ){ |
07 | echo 'execute main start.<br/>' ; |
09 | echo 'execute main end.<br/>' ; |
14 | execute no parameters callback. |
1.2、全局回調(diào)函數(shù)
03 | function callback( $a , $b ){ |
04 | echo "$a<====>$b.<br/>" ; |
07 | call_user_func( $func , 1,2); |
08 | call_user_func_array( $func , array (1,2)); |
1.3、類(lèi)方法及靜態(tài)方法回調(diào)
04 | function callback( $a , $b ){ |
05 | echo "callback $a<====>$b.<br/>" ; |
07 | public static function staticCallback( $a , $b ){ |
08 | echo "staticCallback $a<====>$b.<br/>" ; |
13 | call_user_func( array ( $test , 'callback' ), 1,2); |
14 | call_user_func_array( array ( $test , 'callback' ), array (1,2)); |
19 | call_user_func( array ( 'Test' , 'staticCallback' ), 4,6); |
20 | call_user_func_array( array ( 'Test' , 'staticCallback' ), array (4,6)); |
21 | call_user_func_array( "Test::staticCallback" , array (4,6)); |
26 | staticCallback 4<====>6. |
27 | staticCallback 4<====>6. |
28 | staticCallback 4<====>6. |
2、匿名函數(shù)
2.1、 php中的匿名函數(shù)(Anonymous functions), 也叫閉包函數(shù)(closures), 允許指定一個(gè)沒(méi)有名稱(chēng)的函數(shù)。最常用的就是回調(diào)函數(shù)的參數(shù)值
2 | $closureFunc = function ( $str ){ |
5 | $closureFunc ( "hello world!" ); |
2.2、閉包
2.2.1、傳入?yún)?shù),引用局部變量
02 | $closureFunc = function ( $name ){ |
04 | $func = function ( $age ) use ( $name , $sex ){ |
05 | echo "$name--$sex--$age<br/>" ; |
09 | $func = $closureFunc ( "lvfk" ); |
2.2.2、返回閉包函數(shù)
02 | $closureFunc = function ( $name ){ |
05 | echo "$name+++$sex<br/>" ; |
06 | $func = function () use ( $name , $sex ){ |
07 | echo "$name--$sex<br/>" ; |
11 | $func = $closureFunc ( "lvfk" ); |
2.2.3、閉包改變上下文的值,需要引用傳遞
02 | $closureFunc = function ( $name ){ |
04 | echo "$name+++$age<br/>" ; |
05 | $func = function () use ( $name ,& $age ){ |
07 | echo "$name--$age<br/>" ; |
11 | $func = $closureFunc ( "lvfk" ); |
以上就是對(duì)閉包的簡(jiǎn)單應(yīng)用,通過(guò)閉包,可以看出在函數(shù)外面使用閉包,傳入閉包的參數(shù)內(nèi)容,實(shí)際上可以是上下文對(duì)象內(nèi)容,
也可以在閉包內(nèi)更改上下文對(duì)象值,但必須是引用傳遞
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。