懶人包。
列表
phpinfo() 打開後瀏覽器後會顯示 PHP 版本資訊:
1 | phpinfo() |
$conn->insert_id 取得上一筆 auto_increment 產生的 id 值
1 | $name = 'PeaNu'; |
var_dump(variable) 可以查看比較複雜的資料結構,或者是 function 的回傳值。
查看 Array 的值:
1 | <?php |
Output:
1 | array(3) { ["name"]=> string(5) "PeaNu" ["age"]=> int(20) ["isMarry"]=> bool(true) } |
查看 isset() 的回傳值:
1 | <?php |
isset(variable) 如果變數沒有值或值是 null 就回傳 true,不然回傳 false。
備註:這個判斷機制跟 JS 不太一樣,空字串不是 null 所以會回傳 true 不是 false。
1 | <?php |
empty(expression) 檢查是不是空值(Null、空字串、0):
1 | <?php |
print_f(variable) 可以看變數的值,比 var_dump 簡潔一點:
1 | <?php |
1 | Array ( [name] => PeaNu [age] => 20 ) |
exit('...') die('...') 輸出訊息後退出(跟 return 很類似):
1 | <?php |
gettype(data) 查看資料型態
1 | <?php |
sprintf() 格式化字串,可以想成是 template string 的概念。
1 | $format = 'PeaNu has %d dollars and "%s" .'; |
header() 設定 resonse header 的值
1 | // 代表重新導向到 index.php 的位置 |
http_response_code() 設定 HTTP status code:
1 | // 回傳 422 |
require_once('file.php') 把檔案引入,已經有引入過的話就不會重複引入
1 | require_once('index.php'); |
time() 取得從 1970 到現在的時間(秒數)
1 | time() // 1644216655 |
setcookie($key, $value, $expire) 設定 cookie 內容
1 | // 30 days |
date($formate) 格式化輸出日期
格式表:date_format
1 | echo date('Y-m-d-H-i-s'); // 2022-02-07-07-56-58 |
getrandmax() 取得 rand 能產生的最大值
1 | echo getrandmax(); // 2147483647 |
rand($min, $max) 產生亂數,可指定範圍。沒有指定的話就會從 0 ~ 2147483647:
1 | echo rand(10, 15); // [10 ~ 15](閉區間) |
chr($ascii) 根據 ascii 碼來輸出字串
1 | echo chr(65); // A |
ord($string) 回傳字串的 ascii 碼
1 | echo ord('a'); // 97 |
password_hash($password, format) 內建的雜湊函式,前面填明碼,後面填雜湊的演算法:
1 | <?php |
password_verify($password, hash) 用雜湊值檢查密碼是否正確:
1 | <?php |
htmlspecialchars($string, option) 把輸入的字串做跳脫
備註:要注意丟進去的資料都會被轉成「字串」回傳
1 | /* |
strlen 回傳字串長度
1 | echo strlen('some text'); // 9 |
strtolower 轉小寫
1 | echo strtolower('ABC'); // abc |
strtoupper 轉大寫
1 | echo strtoupper('abc'); // ABC |
str_contains($string, $search) 字串裡有沒有包含某段字(有分大小寫)
附註:這個是 PHP 8 推出的,所以要特別注意。替代方案可以參考 Stack overflow
1 | var_dump(str_contains('abc', 'a')); // bool(true) |
str_replace($replace, $newString, $string) 替換字串
附註:跟 JS 不一樣,這會把所有符合的字都換掉
1 | <?php |
explode($separator) 跟 JS 的 split() 一樣,回傳值也是陣列。
1 | $date = '2022-02-17 23:22:22'; |
intval($str) 把資料型態轉成數字
1 | var_dump(intval('10')); // [int] => 10 |
或也可以像 JS 裡的 parseInt(string, base) 來決定用幾進位解析:
1 | var_dump(intval('100', 2)); // int (4) |
數學相關
floor($number) 無條件捨去
注意:回傳值是 float 不是 int
1 | var_dump(floor(1.5)); // float(1) |
ceil($number) 無條件進位
注意:回傳值是 float 不是 int
1 | var_dump(ceil(1.3)); // float(2) |
round($number) 四捨五入
注意:回傳值是 float 不是 int
1 | var_dump(round(1.3)); // float(1) |
陣列相關
array('key' => 'value') 建立 Array(或想成 Object)
1 | <?php |
sizeof(array) 查看 Array 的長度
1 | <?php |
array_push($array, $value) 新增元素到最後面
1 | $my_array = array(1, 2, 3, 4); |
裡面也可以 push 字串、陣列或物件的資料,就跟 JS 一樣。
array_unshift($array, $value) 新增元素到最前面
1 | $my_array = array(1, 2, 3, 4); |
array_pop($array) 刪除最後一個元素
1 | $my_array = array(1, 2, 3, 4); |
array_shift($array) 刪除第一個元素
1 | $my_array = array(1, 2, 3, 4); |
array_map($callback, $array) 跟 JS 的 Array.map() 一樣,不過要注意 PHP 不能像 JS 一樣把 function 當參數傳,所以寫法不太一樣:
1 | // 先定義好 function |
避免 SQL Injection 的方法
要改用 Prepared Statements 的方式來下 SQL:
1 | // login.php |
bind_param() 有四種型別:
i(integer)d(double)s(string)b(Boolean)
內建變數
$_GET['id']取得 GET 的 id 值$_POST['id']取得 POST 的 id 值$_SESSION['username']SESSION 中 username(讀取或設定)$_SERVER['REQUEST_URI']取得路徑(Domain 下的路徑)$_SERVER['HTTP_HOST']取得域名(主機名稱)$_COOKIE['username']取得 COOKIE 中的 username