PHP 語法深受 C 語言影響,同時融合 Perl 的彈性,形成獨特的「易上手、高彈性」特質。本文為初學者整理 PHP 核心語法基石:八大資料類型、字串雙單引號差異、陣列彈性、物件導向雛形、完整運算子表,以及 PHP 獨有的「變數變數」機制。
PHP 為弱型別語言,**變數無需宣告類型,賦值時自動推斷**。共八大類型:
| 分類 | 類型 | 說明 |
|---|---|---|
| 純量 | Integer (int) | 整數,32 位元有號(-2,147,483,648 ~ 2,147,483,647),超出自動轉 Float |
| Float (double) | 雙精度浮點數,約 1.7E-308 ~ 1.7E+308 | |
| String | 字串,無長度上限(受記憶體限制) | |
| Boolean (bool) | 布林值 `true`/`false` | |
| 複合 | Array | 有序映射(鍵值對),鍵可為整數或字串,值可為任意類型 |
| Object | 物件實例 | |
| 特殊 | Resource | 外部資源控制代碼(如資料庫連線、檔案指標) |
| NULL | 無值,變數未賦值、被 `unset()` 或指派 `null` |
差異在於 **變數解析** 與 **跳脫字元**:
<?php
$a = 'abc';
$b = "abc$a"; // 雙引號:解析變數 → "abcabc"
$c = 'abc$a'; // 單引號:字面字串 → "abc\$a"
$d = "\"cde\""; // 雙引號內跳脫雙引號 → "\"cde\""
$e = '"cde"'; // 單引號內雙引號無需跳脫 → "\"cde\""
?>
效能提示:單引號不解析變數,解析速度略快。大量字串拼接建議用單引號或 Heredoc/Nowdoc 語法。
PHP 陣列同時具備「列表」與「字典」特性,**單一陣列可混合不同類型值**,索引可為整數或字串:
<?php
$names[] = 100; // 整數索引 0
$names[] = 200; // 整數索引 1
$names[] = "hi"; // 整數索引 2
$names[] = 98.5; // 浮點數
$names[] = 1.7E+23; 科學記號
$names['key'] = 'value'; // 字串索引
// 遍歷
foreach ($names as $k => $v) {
echo "$k => $v\n";
}
?>
常用函數:`count()`、`array_push()`/`[]`、`array_merge()`、`array_key_exists()`、`in_array()`。
早期 PHP 4/5 物件模型較簡單,核心概念:
<?php
class Person {
public $name;
public function sayHi() { echo "Hi, I'm $this->name"; }
}
$p = new Person();
$p->name = 'Alice';
$p->sayHi(); // Hi, I'm Alice
?>
除標準算術、比較、邏輯、位元運算子外,PHP 獨有 **字串串接運算子 `.`** 及 **複合指派運算子 `.=`** :
| 運算子 | 名稱 | 範例 | 備註 |
|---|---|---|---|
| . | 字串串接 | $a . $b | PHP 獨有,C 語言無 |
| .= | 串接指派 | $a .= 'tail' | 等同 $a = $a . 'tail' |
| ?? | Null 合併 | $a ?? 'def' | PHP 7+,$a 存在且非 null 回 $a,否則回 'def' |
| ??= | Null 合併指派 | $a ??= 'def' | PHP 7.4+ |
| ?: | Elvis 運算子 | $a ?: 'def' | $a 為真回 $a,否則回 'def' |
| => | 陣列鍵值對 | ['k' => 'v'] | `foreach`、`array()` 語法 |
| -> | 物件成員存取 | $obj->prop | |
| :: | 靜態成員/常數 | Class::CONST |
在變數名前加 `$`,將該變數的**值當作新變數名**;這在動態表單處理、設定檔解析、模板引擎中極實用。
<?php
$a = 'go';
$$a = 'here'; // 等同 $go = 'here';
echo $a; // go
echo $$a; // here (解析 $a 為 'go',再取 $go)
echo $go; // here
?>
實務範例:動態建立變數
<?php
$fields = ['title', 'author', 'date'];
foreach ($fields as $f) {
$$f = $_POST[$f] ?? ''; // 建立 $title, $author, $date
}
?>
警示:濫用變數變數會導致程式碼難以靜態分析、除錯困難。現代框架多改用陣列或物件封裝(如 `$data['title']`、`$dto->title`)。
掌握上述基礎語法,即可閱讀、撰寫大多數 PHP 程式碼。下一篇將深入控制結構、函數、檔案處理、錯誤處理與常見安全實務。