PHP 基本語法規則
- 檔案以
<?php ... ?> 標籤包裹。
- 可與 HTML 混合編寫。
- 每行陳述式以分號
; 結束。
- 變數以
$ 開頭,區分大小寫($var ≠ $Var)。
- 變數命名:字母或底線開頭,後接字母、數字、底線。
資料類型總覽
PHP 共有 8 種基本型別(標量 4 種、複合 2 種、特殊 2 種)。
四種標量類型
| 類型 | 關鍵字 | 說明 | 範例 |
| 布林 | bool | true/false | true, false |
| 整數 | int | 整數(平台相關範圍) | 123, -10, 0x1A (十六進位), 0755 (八進位) |
| 浮點數 | float / double | 小數、科學記號 | 3.14, 1.2e3, .5 |
| 字串 | string | 字元序列 | 'hello', "world $var" |
兩種複合類型
| 類型 | 關鍵字 | 說明 |
| 陣列 | array | 有序對應表(鍵值對) |
| 物件 | object | 類別實例 |
兩種特殊類型
| 類型 | 關鍵字 | 說明 |
| 資源 | resource | 外部資源參考(檔案、資料庫連線等) |
| NULL | null | 無值、未初始化、已 unset |
型別轉換與判斷
強制轉型
<?php
$val = '123';
$int = (int)$val; // 123
$float = (float)$val; // 123.0
$bool = (bool)$val; // true (非空字串)
$arr = (array)$val; // ['123']
$obj = (object)$val; // stdClass { scalar => '123' }
$str = (string)123; // '123'
?>
函式轉型
<?php
settype($val, 'integer'); // 直接修改 $val 型別
?>
型別判斷函式
<?php
is_int($x); is_float($x); is_string($x); is_bool($x);
is_array($x); is_object($x); is_null($x); is_resource($x);
is_numeric($x); // 數字或數字字串
is_scalar($x); // 標量類型
gettype($x); // 回傳型別名稱字串
?>
運算子優先順序(高到低)
| 優先級 | 運算子 | 結合方向 |
| 1 | clone, new | 無 |
| 2 | [ (陣列存取) | 右 |
| 3 | ++, --, ~, (int), (float), (string), (array), (object), (bool), @ | 右 |
| 4 | instanceof | 無 |
| 5 | *, /, % | 左 |
| 6 | +, -, . | 左 |
| 7 | <<, >> | 左 |
| 8 | <, <=, >, >= | 無 |
| 9 | ==, !=, ===, !==, <=> | 無 |
| 10 | & | 左 |
| 11 | ^ | 左 |
| 12 | | | 左 |
| 13 | && | 左 |
| 14 | || | 左 |
| 15 | ?? (null 聯合) | 左 |
| 16 | ? : (三元) | 右 |
| 17 | =, +=, -=, *=, /=, .=, %=, &=, |=, ^=, <<=, >>= | 右 |
| 18 | and | 左 |
| 19 | xor | 左 |
| 20 | or | 左 |
流程控制結構
if / else / elseif
<?php
if ($score >= 90) {
echo '優等';
} elseif ($score >= 60) {
echo '及格';
} else {
echo '不及格';
}
?>
switch
<?php
switch ($grade) {
case 'A': echo '優'; break;
case 'B': echo '良'; break;
case 'C': echo '可'; break;
default: echo '其他';
}
?>
迴圈
<?php
// for
for ($i = 0; $i < 10; $i++) { /* ... */ }
// while
while ($row = $stmt->fetch()) { /* ... */ }
// do-while(至少執行一次)
do {
$input = readInput();
} while ($input !== 'quit');
// foreach(陣列/物件遍歷)
foreach ($arr as $key => &$val) { $val *= 2; } // 參考修改原值
break / continue
break:跳出當前迴圈/switch,可 break N 跳出 N 層。
continue:跳過本輪剩餘,進入下一輪,可 continue N。
常用陣列函式
| 函式 | 用途 |
| count() | 元素個數 |
| is_array() | 判斷是否陣列 |
| array_keys() / array_values() | 取得所有鍵/值 |
| in_array() | 檢查值是否存在 |
| array_push() / array_pop() | 堆疊操作 |
| array_shift() / array_unshift() | 隊列操作 |
| explode() / implode() | 字串分割/合併 |
| array_map() / array_filter() / array_reduce() | 函數式操作 |
常見陷阱提醒
- ⚠️ 浮點數精度:
0.1 + 0.7 !== 0.8,金額計算請用 bcmath 或存分為整數。
- ⚠️
== vs ===:前者型別轉換後比較,後者型別值皆需相同。
- ⚠️
empty() 視 0, '0', false, null, [], '' 為真。
- ⚠️ 字串以數字開頭轉 int 會取數字部分,否則為 0。
打好基礎語法與型別觀念,是寫出健壯 PHP 程式的第一步。