回調(diào)函數(shù),可以配合匿名函數(shù)和變量函數(shù)實現(xiàn)更加優(yōu)美、復雜的一種函數(shù)結(jié)構(gòu)。
回調(diào)函數(shù),就是在處理一個功能的時候,我讓這個功能自定義能力再強一些,我準許調(diào)用這個函數(shù)的時候,還可以傳入一個函數(shù)配合、協(xié)助進行處理。
實例:
<?php function woziji($one,$two,$func){ //我規(guī)定:檢查$func是否是函數(shù),如果不是函數(shù)停止執(zhí)行本段代碼,返回false if(!is_callable($func)){ return false; } //我把$one、$two相加,再把$one和$two傳入$func這個函數(shù)中處理一次 echo $one + $two + $func($one,$two); } //我們定義幾個函數(shù)試試 function plusx2( $foo , $bar){ $result = ($foo+$bar)*2; return $result; } function jian( $x , $y ){ $result = $x - $y; return $result; } //調(diào)用一下函數(shù),woziji,向里面?zhèn)魅雲(yún)?shù)試試 echo woziji(20,10,'plusx2') .'<br>'; // 90 //將plusx2改成jian試試結(jié)果 echo woziji(20,10,'jian'); // 40 ?>
以上的實例代碼可能一下會看不懂,不要著急,下面我們來詳細的講解一次上面的代碼處理過程是怎樣的:
將20賦值給形參$one,10賦值給了$two,而plusx2或者jian這兩個變量函數(shù),賦值給了$func
在woziji這個函數(shù)中判斷plusx2或者jian是否為函數(shù),不是函數(shù)就return false 停止執(zhí)行了
顯示plusx2或者jian是函數(shù)。因此$one = 20, $two =10相加了,相加后,$one和$two又帶入到了了$func($one,$two)中。
帶入至里面后而$func,是可變的,可以為plusx2或者jian。如果為plusx2的話,$one = 20,$two = 10 的這個兩個結(jié)果又給了plusx2函數(shù)里面的$foo和$bar
$foo + $bar 乘以2后將結(jié)果返回至woziji這個函數(shù)功能體的運算處:$one + $two + $func($one,$two);
這樣主得到了運算結(jié)果
現(xiàn)在我們明白了回調(diào)函數(shù):在一個調(diào)數(shù)里面,再傳入一個函數(shù)名,將函數(shù)名加上()括號。識為變量函數(shù),配合執(zhí)行。
實際上自己也是可以調(diào)用自己。
<?php function jisuan($one,$two,$func){ if(!is_callable($func)){ return false; } echo $one * $two - $func($one,$two); } function jian( $foo , $bar){ $result = $foo-$bar; return $result; } echo jisuan(5,7,'jian'); ?> //結(jié)果