# 5. 重複使用程式碼與編寫函式 {%hackmd QnyEFBdERZebn4iQDXNPnA %} ## 本章重點:用function取代重複的工作 ## 01 優點 ### 成本低 - 程式碼最花時間在維護、修改、測試與文件化 ### 可靠性 - 被驗證過 ### 一致性 - 確保牽一髮而動全身(比方說,為了追求樣式統一,不用到處改code) ## 02 使用require()與include() - 類似C語言的 #include - 差異:require()失敗時,卻產生嚴重錯誤;include()只會產生警告 - require_once(), include_once() => 確保檔案只會被加入一次 ### 使用require() - e.g. ```php= //create a file named reusable.php which contains the following code <?php echo 'Here is a very simple PHP statement.<br />'; ?> //create a file named main.php which contains the following code <? echo 'This is the main file.<br />'; require('reusable.php'); echo 'The script will end now.<br />'; ?> ``` - 注意:require()不會驗證副檔名,它會執行php的部分 ## 03 使用PHP函式 ### 呼叫函式 - 內建 ```php= phpinfo(); ``` - 自定義 ### 大小寫 - 函式,PHP不區分大小寫 - e.g. - function_name() = Function_Name() = FuNcTioN_naME() - 變數會區分 - e.g. - $name != $Name ## 04 函式基本架構 - 宣告 ```php= function my_function(){ echo 'My function was called.'; } my_function();//My function was called. ``` ### 命名 - 不能與既有函式撞名 - 只能使用字母、數字、底線 - 第一個字不得使用數字 ## 05 使用參數 - func_num_args() => 回傳被傳入的參數數量 - func_get_args() => 回傳參數組成的陣列 - func_get_arg() => 可自行決定回傳被傳入的參數數量 ```php= function var_args(){ echo 'Number of parameters: '; echo func_num_args(); echo '<br />'; $args = func_get_args(){ foreach($args as $arg){ echo $arg.'<br />'; } } } ``` ## 06 了解範圍 ### 區域變數 ### 全域變數 ### 超全域變數 ## 07 以址傳遞 vs 以值傳遞 ### 以址傳遞 - 連續使用原變數 - &$value ### 以值傳遞 ## 08 使用return關鍵字 - 可以用來停止函式的執行 - 回傳值 ## 09 遞迴 - 自己呼叫自己 ## 10 匿名函式(closure) - 沒有名稱 - 常常被當成callback function(被傳給其他函式的函式) ```php= //可以在行內宣告成匿名函式 array_walk($array, function($value){echo "$value <br />"}); //也可以使用變數來保存closure $printer = function($value){echo "$value <br />"}; //array_walk可以精減成: array_walk($array, $printer); ``` - closure可以存取全域變數,要使用use定義他們 ```php= $markup = 0.20; $apply = function(&$value) use ($markup){ $val = $val * (1+$markup); }; ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up