PHP 的控制結構是編寫業務邏輯的基石。本文系統梳理條件判斷、循環控制、文件包含、函數定義、面向對象語法等核心知識點,附帶規範代碼示例,適合入門鞏固與速查參考。
if ($a > $b) {
echo "a is bigger than b";
} elseif ($a == $b) {
echo "a equals b";
} else {
echo "a is smaller than b";
}
// 替代冒號語法(模板中常用)
if ($a == 5):
echo "a equals 5";
elseif ($a == 6):
echo "a equals 6";
else:
echo "a is neither 5 nor 6";
endif;
elseif 與 else if 效果相同,建議統一使用 elseif。true。switch ($i) {
case 0:
echo "i equals 0";
break;
case 1:
echo "i equals 1";
break;
case 2:
echo "i equals 2";
break;
default:
echo "i is something else";
}
if 更清晰、效率略高。break 防止貫穿,或有意利用貫穿特性(需加註釋)。case 支持標量值(整數、浮點、字符串),不支持表達式。// while:先判斷後執行
$i = 1;
while ($i <= 10) {
echo $i++;
}
// do-while:先執行一次再判斷,至少執行一次
$i = 0;
do {
echo $i;
} while ($i > 0); // 僅輸出 0
// 標準形式
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
// 省略表達式(慎用)
for ($i = 1;; $i++) {
if ($i > 10) break;
echo $i;
}
expr1 初始化、expr2 條件判斷、expr3 迭代增量,均可為空。while 或 foreach。$arr = ['a' => 1, 'b' => 2];
foreach ($arr as $key => $val) {
echo "$key => $val";
}
// 遍歷對象屬性
foreach ($obj as $prop => $val) { ... }
註:早期版本使用 while(list($k,$v)=each($arr)),已棄用。
| 語句 | 行為 | 典型場景 |
|---|---|---|
| require | 編譯時包含,失敗產生 Fatal Error 停止執行 | 核心配置、類定義、必須存在的文件 |
| include | 運行時包含,失敗僅產生 Warning 繼續執行 | 模板文件、可選模塊、循環中動態包含不同文件 |
| require_once / include_once | 防止重複包含 | 類文件、函數庫 |
$files = ['first.inc', 'second.inc', 'third.inc'];
for ($i = 0; $i < count($files); $i++) {
include($files[$i]); // 僅 include 可在循環中動態包含
}
function foo($arg1, $arg2 = 'default') {
echo "Example function\n";
return $retval;
}
return array(1,2,3) 實現多值返回,配合 list($a,$b,$c) = foo(); 解包。&(function foo(&$bar))或調用時加 &(foo(&$str)),外部變量將被修改。$func = 'strlen';
echo $func('hello'); // 5
$anon = function($x) { return $x * 2; };
echo $anon(5); // 10
class Cart {
public $items = [];
public function addItem($artnr, $num) { $this->items[$artnr] += $num; }
public function removeItem($artnr, $num) { ... }
}
$cart = new Cart();
$cart->addItem('10', 1);
public:任意位置訪問。protected:本類及子類訪問。private:僅本類內部訪問。class NamedCart extends Cart {
public $owner;
public function setOwner($name) { $this->owner = $name; }
public function __construct($item = '10', $num = 1) {
parent::__construct(); // 顯式調用父構造函數
$this->addItem($item, $num);
}
}
$ncart = new NamedCart('20', 17);
__construct(),析構函數為 __destruct()。class Foo {
public static $count = 0;
public function __call($method, $args) { ... } // 攔截不可訪問方法
public function __get($name) { ... } // 攔截不可訪問屬性讀取
public function __set($name, $value) { ... } // 攔截不可訪問屬性寫入
}
==(鬆散比較)與 ===(嚴格比較),避免類型轉換陷阱。foreach。require。掌握上述控制結構與 OOP 基礎,即可應對絕大多數 PHP 業務開發場景。