PHP 學習前置條件
- 已安裝支援 PHP 的 Web 伺服器(Apache/Nginx + PHP-FPM)
- 具備基本 HTML 語法知識
- 理解基本程式設計概念(變數、迴圈、條件判斷、函式)
PHP 標籤與嵌入 HTML 的四種方式
| 標籤風格 | 範例 | 備註 |
| 標準標籤 (推薦) | <?php ... ?> | 永遠可用,XML 相容,最佳實踐 |
| 短標籤 | <? ... ?> | 需啟用 short_open_tag=On,可能與 XML 衝突 |
| Script 標籤 | <script language="php"> ... </script> | 較冗長,極少使用 |
| ASP 風格 | <% ... %> | 需啟用 asp_tags=On,PHP 7.0 已移除 |
最佳實踐:統一使用 <?php ... ?>,純 PHP 檔案結尾可省略 ?> 避免輸出空白字元。
基本語法規則
陳述句結束
<?php
$name = 'PHP'; // 分號結束
echo $name; // 分號結束
?> // 結束標籤隱含分號,最後一行可省略分號但建議保留
註解風格
<?php
// 單行註解 (C++ 風格)
# 單行註解 (Shell/Perl 風格)
/*
多行註解 (C 風格)
可跨越多行
*/
/**
* 文件區塊註解 (PHPDoc 風格)
* @param string $name
* @return void
*/
輸出語句:echo vs print
| 特性 | echo | print |
| 多參數支援 | ✓ echo 'a', 'b', 'c'; | ✗ 單一參數 |
| 回傳值 | 無 | 永遠回傳 1 |
| 括號需求 | 非函式,括號可選 | 類函式,括號可選 |
| 速度 | 略快 | 略慢 |
<?php
$a = 'Hello';
$b = 'World';
// 正確用法
echo $a, ' ', $b; // Hello World
echo "$a $b"; // Hello World (雙引號解析變數)
echo '$a $b'; // $a $b (單引號不解析)
// 錯誤用法
// print $a, $b; // Parse Error: print 不支援多參數
print "$a $b"; // 正確
?>
第一個 PHP 程式:Hello World
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>第一個 PHP 程式</title>
</head>
<body>
<h1>First PHP Page</h1>
<hr>
<?php
// 單行註解
/*
多行註解
列印訊息
*/
echo "Hello World!"; // 輸出字串
# Unix 風格單行註解
?>
</body>
</html>
變數基礎
- 以
$ 開頭,區分大小寫
- 動態型別:賦值時自動決定型別
- 命名規則:字母/底線開頭,後接字母/數字/底線
- 預先定義變數:
$_GET, $_POST, $_SESSION, $_SERVER 等
<?php
$name = 'PHP'; // 字串
$version = 8.2; // 浮點數
$year = 2024; // 整數
$isAwesome = true; // 布林值
$skills = ['HTML', 'CSS', 'JS', 'PHP']; // 陣列
$obj = new stdClass(); // 物件
$nullVar = null; // NULL
// 變數變數
$lang = 'PHP';
$$lang = 'Hypertext Preprocessor';
echo $PHP; // 輸出:Hypertext Preprocessor
?>
字串處理重點
| 操作 | 單引號 | 雙引號 | Heredoc/Nowdoc |
| 變數解析 | 否 | 是 | Heredoc: 是 / Nowdoc: 否 |
| 跳脫字元 | 僅 \' \\ | 完整支援 \n \t \$ \" 等 | 同左 |
| 效能 | 略快 | 略慢 | 同雙引號 |
<?php
$framework = 'Laravel';
// 雙引號解析
echo "學習 $framework 框架"; // 學習 Laravel 框架
echo "學習 {$framework} 框架"; // 學習 Laravel 框架 (建議加大括號)
// 單引號不解析
echo '學習 $framework 框架'; // 學習 $framework 框架
// Heredoc (雙引號行為)
$doc = <<<EOT
這是多行字串
框架:$framework
EOT;
// Nowdoc (單引號行為) PHP 5.3+
$nowdoc = <<<'EOT'
不解析 $framework 變數
EOT;
?>
常見新手錯誤與避坑指南
- 遺漏分號:養成每行結尾加分號習慣
- 變數名稱錯誤:PHP 區分大小寫,
$userName ≠ $username
- 單雙引號混淆:需解析變數用雙引號,純字串用單引號
- 輸出前送出標頭:
header(), session_start(), setcookie() 必須在任何輸出前呼叫
- 短標籤相依:避免使用
<? ?>,伺服器可能未啟用
- 編碼不一致:檔案儲存為 UTF-8 無 BOM,資料庫、HTML、PHP 內部編碼統一
下一步學習路徑建議
- 表單處理:
$_GET, $_POST, 驗證與過濾
- 流程控制:
if/else, switch, for/foreach/while
- 函式定義與引用
- 陣列操作:關聯陣列、多維陣列、陣列函式
- 檔案與目錄操作
- MySQL/PostgreSQL 資料庫連線 (PDO)
- Session 與 Cookie 狀態管理
- 錯誤處理與例外機制
- Composer 套件管理與現代框架 (Laravel/Symfony)
PHP 官方文件 https://www.php.net/manual/zh-tw/ 是最權威、最完整的學習資源,建議加入書籤隨時查閱。