<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ## 回調函數 先看一下C語言里的回調函數:回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用于對該事件或條件進行響應。 其他語言里的回調函數的概念與之相似,只不過各種語言里回調函數的實現機制不一樣,通俗的來說,回調函數是一個我們定義的函數,但是不是我們直接來調用,而是通過另一個函數來調用,這個函數通過接收回調函數的名字和參數來實現對它的調用。 > 說明:回調函數就是調用函數的時候將另外一個函數的名稱當作參數傳遞進去,并且在函數體中進行調用 案例 01 ```php function playing() { echo "is playing <br/>"; } function sleeping() { echo "is sleeping <br/>"; } function callback_test($fun_name) { $fun_name(); } callback_test('playing'); // is playing callback_test('sleeping'); // is sleeping ``` 案例 02 回調傳入參數 ```php function play($param) { echo $param . " is playing <br/>"; } function sleeps($param) { echo $param . " is sleeping <br/>"; } function callback_param($fun_name, $param) { echo "現在調用的函數是... <br/>"; $fun_name($param); // playing() } callback_param('play', 'Tinywan'); ``` 案例 03 2個回調傳入參數,做一個加減運算 ```php function add($x, $y) { return $x + $y; } function reduce($x, $y) { return $x - $y; } function math_param($fun_name, $x, $y) { return $fun_name($x, $y); } echo math_param('add', 10, 20); ``` >[info] 案例 04 `array_map` 函數 為數組的每個元素應用回調函數 語法: ``` array array_map ( callable $callback , array $array1 [, array $... ] ) ``` * 普通案例 ```php // 計算一個數的階乘,eg: 2 階乘 = 2 * 2 *2 function cube($n) { return ($n * $n * $n); } $tmp_arr = [1, 2, 3, 4]; $res = array_map('cube', $tmp_arr); print_r($res); // 打印結果 ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 ) ``` * 通過匿名函數實現 ```php $tmp_arr2 = [2, 4, 6, 8]; $res2 = array_map(function ($n) { return ($n * 2); }, $tmp_arr2); print_r($res2); // 輸出結果 Array ( [0] => 4 [1] => 8 [2] => 12 [3] => 16 ) ``` * 使用單個參數 ```php function findName($val){ if($val == 'Tinywan') { return 'ShaoBo Wan'; } return $val; } $nameArr = ['Ngix','Oxd','Tinywan']; $res = array_map('findName',$nameArr); print_r($res); // 輸出結果 Array ( [0] => Ngix [1] => Oxd [2] => ShaoBo Wan ) ``` * 使用多個參數 ```php function funSame($v1,$v2){ if($v1 == $v2) { return 'same'; } return 'different'; } $arr01 = ['Ngix','Oxd','Tinywan']; $arr02 = ['Tiny','Tinaiai','Tinywan']; $res1 = array_map('funSame',$arr01,$arr02); print_r($res1); // 輸出結果 Array ( [0] => different [1] => different [2] => same ) ``` * 當自定義函數名設置為 `null` 時 ```php $arr01 = ['Ngix','Oxd','Tinywan']; $arr02 = ['Tiny','Tinaiai','Tinywan']; $res2 = array_map(null,$arr01,$arr02); print_r($res2); // 輸出結果 Array ( [0] => Array ( [0] => Ngix [1] => Tiny ) [1] => Array ( [0] => Oxd [1] => Tinaiai ) [2] => Array ( [0] => Tinywan [1] => Tinywan ) ) ``` > 可以看出回調函數設置為null的情況下,是把兩個數組合并到一起,組裝成一個新數組 >[info] 案例 05 `array_walk `函數 array_walk() 函數對數組中的每個元素應用回調函數。如果成功則返回 TRUE,否則返回 FALSE。 典型情況下 function 接受兩個參數。array 參數的值作為第一個,鍵名作為第二個。如果提供了可選參數 userdata ,將被作為第三個參數傳遞給回調函數。 如果 function 函數需要的參數比給出的多,則每次 array_walk() 調用 function 時都會產生一個 E_WARNING 級的錯誤。這些警告可以通過在 array_walk() 調用前加上 PHP 的錯誤操作符 @ 來抑制,或者用 error_reporting()。 語法: ``` bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] ) ``` **array** 必需。規定輸入的數組。 **callback** 必需。用戶自定義函數的名稱。 典型情況下 callback 接受兩個參數。array 參數的**值**作為第一個,**鍵**名作為第二個。 ```php $school = ['first'=>'QinHua','second'=>'BaiDa','third'=>'ZheDa']; function print_school_array($val, $key) { echo $key . ' : ' . $val . "\n"; } array_walk($school,'print_school_array'); // echo 結果 first : QinHua second : BaiDa third : ZheDa // 使用匿名函數也是同樣的結果 array_walk($school, function ($val, $key) { echo $val . ' : ' . $key . "\n"; }); ``` **userdata** 可選。用戶輸入的值,可作為回調函數的參數。 如果提供了可選參數 userdata,將被作為第三個參數傳遞給 callback funcname。 **提示和注釋** * 提示:您可以為函數設置一個或多個參數。 * 注釋:如果回調函數需要直接作用于數組中的值,可以將回調函數的第一個參數指定為引用:&$value。(參見例子 3) * 注釋:將鍵名和 userdata 傳遞到 function 中是 PHP 4.0 新增加的。 **案例** * 打印數組中的值和鍵 ```php function myfunction($value, $key) { echo "$key has the value $value \n"; } $a = ["a" => "Cat", "b" => "Dog", "c" => "Horse"]; array_walk($a, "myfunction"); // 打印結果 a has the value Cat b has the value Dog c has the value Horse ``` * 帶有一個參數 ```php function fun_param($value, $key,$param) { echo "KEY=$key Value=$value Param=$param \n"; } $arr = ["a" => "Cat", "b" => "Dog", "c" => "Horse"]; array_walk($arr,'fun_param','Tinywan'); // 打印結果 KEY=a Value=Cat Param=Tinywan KEY=b Value=Dog Param=Tinywan KEY=c Value=Horse Param=Tinywan ``` * 改變數組元素的值(請注意` &$value`):(這種情況用的比較多!) ```php function fun_value(&$value, $key,$param) { $value = $value.'-'.$param; } $arr = ["a" => "Cat", "b" => "Dog", "c" => "Horse"]; print_r($arr); array_walk($arr,'fun_value','[school]'); print_r($arr); // 打印結果 Array ( [a] => a:Cat-[school] [b] => b:Dog-[school] [c] => c:Horse-[school] ) ``` >[danger] 注意,第一個參數數組傳遞的是引用而不是傳值 * 官方案例 ```php $school = ['first' => 'QinHua', 'second' => 'BaiDa', 'third' => 'ZheDa']; function print_school_array($val, $key) { echo $key . ' : ' . $val . "\n"; } function user_school_array(&$val, $key,$user_data) { $val = "($user_data) $val"; } array_walk($school,'user_school_array','Tinywan'); array_walk($school,'print_school_array'); // echo 結果 first : (Tinywan) QinHua second : (Tinywan) BaiDa third : (Tinywan) ZheDa ``` * 匿名函數實現 ```php $school = ['first' => 'QinHua', 'second' => 'BaiDa', 'third' => 'ZheDa']; $user_data = 'AI'; array_walk($school,function (&$val, $key) use ($user_data){ $val = "[$user_data] $val"; }); array_walk($school,'print_school_array'); // echo 結果 first : [AI] QinHua second : [AI] BaiDa third : [AI] ZheDa ``` >[info] array_walk()與 array_map() 的區別 區別與總結: * array_walk() 主要用于對某個數組的迭代,相當于 foreach; * array_map() 主要是根據某個/某幾個數組產生一個新的數組,常應用于遞歸效果! 詳解 * [PHP數組函數: array_walk()](http://www.cnblogs.com/52php/p/5675330.html) * [PHP數組函數: array_map()](http://www.cnblogs.com/52php/p/5675331.html) >[info] 案例 06 `call_user_func `函數 把第一個參數作為回調函數調用 語法: ``` mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) ``` > 第一個參數 callback 是被調用的回調函數,其余參數是回調函數的參數。 * 一個參數 ```php function say($name){ echo $name." is saying"; } call_user_func('say','Tinywan'); // 輸出:Tinywan is saying ``` * 兩個參數 ```php function what($name,$event){ echo $name." is ".$event; } call_user_func('what','Tinywan','song'); // 輸出:Tinywan is song ``` * 沒有參數 ```php function test(){ echo __FUNCTION__." is test"; } call_user_func('test'); ``` * 系統函數 ```php echo call_user_func('md5','123456'); // 10adc3949ba59abbe56e057f20f883e- ``` * 多個參數,使用`call_user_func_array()`函數 ```php function foobar($arg, $arg2) { echo __FUNCTION__, " got $arg and $arg2\n"; } call_user_func_array("foobar", array("one", "two")); // foobar got one and two // 加法運算 function add($v1,$v2){ return $v1 + $v2; } echo call_user_func_array('add',[12,23]); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看