6.
把程式片段打包成函數
一、關於函數
- 函數有兩種,一組是PHP內建函數,另一種是自訂的函數。
- 一個函數通常都有其獨特的功能,可視為具特定功能的小零件,直接呼叫使用即可,如:phpinfo(),有些有傳回值,有些沒有;有些需要輸入參數,有些不用。
- 完整函數手冊:http://www.php.net/manual/en/funcref.php
- 函數基本結構:傳回值 函數名稱(參數1,參數2...);
- 函數傳回值有:string(字串)、int(整數)、array(陣列)、object(物件)、bool(布林值)、void(無傳回值)、mixed(不一定)、new(建立物件)
二、自訂函數
- 自訂函數的基本語法為:
function 函數名稱($參數1='預設值' , $參數2='預設值',...){
global $外面的變數;
函數內容,任何有效的 PHP 程式碼,包括其它函數和class定義 ;
return 傳回值;
}
- 參數不見得要有,傳回值也不一定要有。
- 例如把登入做成函數:
function login()
{
require_once "config.php";
$name = isset($_POST['name']) ? filter_var($_POST['name'], FILTER_SANITIZE_SPECIAL_CHARS) : '';
$passwd = isset($_POST['passwd']) ? $_POST['passwd'] : '';
if ($name == $admin_id and $admin_pass == $passwd) {
$_SESSION['group'] = 'admin';
$_SESSION['name'] = $name;
}
}
- 超級全域變數可直接在函數中使用,外面的一般變數無法進到函數中,除非做成參數或是用 global 宣告。
- 當然,函數裡面的變數外面也無法取用,除非return出去。
- 函數放在檔案中任何地方都可以,放在呼叫之前或之後都沒關係。
- 要使用時,呼叫之即可
switch ($op) {
case 'login':
login();
header("location:{$_SERVER['PHP_SELF']}");
exit;
case "logout":
header("location:{$_SERVER['PHP_SELF']}");
exit;
default:
# code...
break;
}
三、練習:
- 請把登出也做成函數