<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # :-: 一、函數是什么 * 函數是一段需要重復執行的代碼片斷 * 函數是實現代碼復用的重要手段 * 函數是現代編程語言最重要的基本單元 * 函數永遠是編程的核心工作 ***** # :-: 二、函數的分類 根據函數的提供者(編寫者),分為二類 * 系統函數: 編程語言開發者事先寫好提供給開發者直接使用的 * 自定義函數: 用戶根據自身需求,對系統功能進行擴展,我們又稱為方法 ***** # :-: 三、函數的基本語法 * 語法: `function 函數名(參數列表){函數體}` * 必須使用關鍵字:`function` 聲明 * 函數名稱必須符合PHP標識符命名規范 * 函數名稱**不區分大小寫**,多個單詞推薦使用下劃線連接 * 函數調用者傳遞給函數的參數必須寫在參數列表中 * 參數列表中的參數必須初始化(即有值) * 參數列表可以為空 * 函數體可以為空, 也可以由一條或多條語句組成 * 通常函數體會有`return`返回函數執行結果 ```php function func_name(參數列表) { //函數體: 由一條或多條語句組成,可以為空 } ``` ***** # :-: 四、函數作用域 * 眾所周知, 作用域是用來查找變量的工具 * php中, 只有函數作用域和全局使用域 * 所以函數作用域中的變量,外部不可見 * 全局作用域聲明變量,在函數中是可見的 ***** # :-: 五、PHP中的函數知識,實例 ### 1、函數的常規聲明與調用 ```php // 使用關鍵字function 聲明函數 // 函數名稱必須符合php關于標識符的約定 // 函數需要接收的參數寫到函數名后的一對括號內 function sum(){ // 函數可以有return 語句,將執行結果返回給調用者 return 1+1; // 如果不有 return 返回 null } echo sum(); ``` ***** ### 2、函數的參數 ```php // 括號內的參數列表, 是形式參數,通常與實參一一對應 // 實參必須被初始化, 可以被實參, 也可以用默認值 function sum($a, $b){ // $c 是函數自已的私有變量, 也叫局部變量,對外不可見 $c = $a + $b; return $c; } // 調用 // 按名稱調用,必須在函數名后面添加一對圓括號 // 將調用參數寫到括號內 // 括號內的參數叫實際參數, 簡稱: 實參 echo sum(10, 20); // 函數內的私有變量,外部不可訪問 // echo $c; // echo '<hr>'; ``` ***** ### 3、函數參數的默認值 ```php function sum($a = 20, $b = 30){ $c = $a + $b; return $c; } echo '<per>'; // 全部賦值,使用自定義的值 echo sum(10, 15), '<br>'; // 只給$a賦值,$b取默認值 echo sum(10), '<br>'; // 全部取默認值 echo sum(), '<br>'; echo '<hr>'; ``` ***** ### 4、函數不固定參數數量 * func_num_args 獲取實參的數量 * func_get_args 獲取實參的值(數組) ```php // 一、形參列表只是占位符,可以在函數中獲取調用的實參 function sum1(){ // 獲取實參的數量 $argNum = func_num_args(); // 無參數 echo $argNum; // 獲取實參組成的數組 $argArr = func_get_args(); // 無參數 print_r($argArr); // 獲取每一個參數 echo func_get_arg(0); // 第一個實參 echo func_get_arg(1); // 第二個實參 // 1,計算二個數的和 $a = func_get_arg(0); $b = func_get_arg(1); return $a + $b; // 2,使用實參數組來簡化,計算二個數的和 $total = 0; foreach ($argArr as $value) { $total += $value; } return $total; // 3,以上數組求和,可以使用數組函數arrya_sum()簡化,計算二個數的和 return array_sum($argArr); } echo sum1(10, 20); echo '<br>'; // 函數內部使用參數循環時可以計算任意數量的數據之和 echo sum1(10, 20, 30, 40, 50); echo '<hr>'; // 二、php7, 提供了一種可變長參數, 可以替代func_get_args()函數 function sum2(...$params){ // 變長參數的標示 ... // 將實參全部打包到形參變量$params中 print_r($params); // 實現上例的累加操作 $total = 0; foreach ($params as $value) { $total += $value; } return $total; } echo sum2(1,2,3,4,5); echo '<hr>'; // 三、變長參數的一個應用場景 function sum3($a, $b, ...$c){ // $a=1, $b=2, 剩下參數全部打包到數組$c中, $c=[3,4,5,6] return '$a='.$a.', $b='.$b .'<br>'. print_r($c, true); } echo sum3(1,2,3,4,5,6); echo '<hr>'; // 四、變長的實參 function sum4($a,$b,$c,$d){ return $a+$b+$c+$d; } $arr = [6,7,8]; echo sum4(2,...$arr); echo '<br>'; // $arr 會用... 自動展開, 等價于這樣調用 echo sum4(2,6,7,8); echo '<hr>'; // 五、php7, 可以對參數類型進行限制 function sum5(int $a,...$arr){ // 限制了參數整數類型, 2.5轉為2, '5' 被強制轉換成整數5 return $a + array_sum($arr); } echo sum5(2.5, 3, 4, '5'); ``` ***** ### 5、函數的返回值 ```php // 1、return 返回值 function demo1(){ // 可以使用返回語句: return 返回執行結果 return 'Hello PHP'; } echo demo1(); echo '<hr>'; // 2、如果沒有return , 默認返回 null function demo2(){ } // 檢測返回值的類型 echo is_null(demo2()) ? '返回NULL' : '沒有返回NULL'; echo '<hr>'; // 3、函數不允許返回多個值 function demo3(){ $a = 10; $b = 20; // return 返回多個值報錯 return $a,$b; } echo demo3(); // 4、函數返回多個值,用數組返回 function demo4(){ $a = 10; $b = 20; return [$a, $b]; } echo '<pre>' . print_r(demo4(),true); // 5、php7中, 可以限定函數的返回類型 function demo5($a, $b) :int{ return $a + $b; } // 不限定返回類型,輸出: 4.7, 限定后返回: 4 echo demo5(1.4, 3.3); ``` ***** ### 6、函數中的變量訪問 ```php // 1、函數中的變量訪問 $site = 'www.php.cn'; function demo1(){ // 函數中不能直接訪問外部變量 return $site; } echo demo1(); echo '<hr>'; // 2、函數中的全局變量訪問 $site = 'www.php.cn'; function demo2(){ // 在函數中使用global關鍵字聲明一下$site是一個全局變量 // 這樣, 函數中就可識別出這個$site變量 global $site; // 函數中不能直接訪問外部變量 return $site; } echo '<per>'; echo demo2(); echo '<hr>'; // 3、函數外部聲明的變量,會自動成為超全局變量數組$GLOBALS的成員 $site = 'www.php.cn'; echo $GLOBALS['site']; echo '<hr>'; function demo3(){ // 超全局變量不受作用域限制,可以在腳本的任何地方使用,當然也包括函數內 return $GLOBALS['site']; } echo demo3(); // 4、常量也不受作用域的限制,可以在腳本的任何地方使用 // 所謂常量,可以理解為只讀變量, 一經定義不允許更新或刪除 define('SITE_NAME', 'PHP中文網'); function demo4(){ return SITE_NAME; } echo demo4(); // 5、外部如何訪問函數的私有變量 function demo5(){ $email = 'ouyangke@php.cn'; // 通過return 返回私有變量到外部調用者 return $email; } echo demo5(); ``` ***** ### 7、匿名函數與閉包 * 官網解釋: * 匿名函數(Anonymous functions),也叫閉包函數(closures) * 允許 臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值。 * 當然,也有其它應用的情況。匿名函數目前是通過 Closure 類來實現的。 ```php // 1、匿名函數, 做為值來使用 $sum = function ($a, $b) { return $a + $b; }; echo $sum(5,6); // 2、匿名函數: 做為回調參數來使用 $arr = [3,1,6,2,9]; usort($arr, function ($a, $b){ // >0, 由小到大 // =0, 相等 // <0, 由大到小 return $a - $b; // asc // return $b - $a; // desc }); print_r($arr); // 3、php7中, 對于這類比較運算, 有一個更簡潔的語法:太空船操作符 $arr = [3,1,6,2,9]; usort($arr, function ($a, $b){ return $a <=> $b; return $b <=> $a; }); print_r($arr); // 4、獲取父作用域中的變量 $name = '歐陽克'; $f1 = function (){ // 直接獲取外部變量,是取不到的 return $name; }; echo $f1(); // 5、獲取父作用域中的變量 $name = '歐陽克'; $f2 = function() use ($email) { return $email; }; echo $f2(); // 6、大多數情況下, 我們會在閉包函數中對外部變量進行更新 // 這時可以將外部變量以引用的方式傳入 // 默認情況下,參數是以值的方式傳到函數中,所謂引用, 就是內外部實際訪問的是同一個變量 // 只需要在參數前添加一個取地址符: & 即可 $name = '歐陽克'; $f3 = function() use (&$name) { return $name = '黃蓉'; }; echo $f3(); // 7、在子函數中的使用 function demo(){ $name = '歐陽克'; return function () use ($name) { return $name; }; } //demo()返回結果是函數, 所以需要再次調用 echo demo()(); ``` >[danger] 備:將一個函數的返回值,設置為一個閉包函數, 在實際開發中非常有用的, 等后面遇到具體應用場景時再細說
                  <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>

                              哎呀哎呀视频在线观看