首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 控制結構完整指南:if/else/elseif、循環、switch、include/require、函數與類

     編輯:PHP 相關知識

PHP 的控制結構是編寫業務邏輯的基石。本文系統梳理條件判斷、循環控制、文件包含、函數定義、面向對象語法等核心知識點,附帶規範代碼示例,適合入門鞏固與速查參考。

一、條件判斷

1. if / else / elseif

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。

2. switch 多條件分支

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 支持標量值(整數、浮點、字符串),不支持表達式。

二、循環控制

1. while / do-while

// while:先判斷後執行
$i = 1;
while ($i <= 10) {
    echo $i++;
}

// do-while:先執行一次再判斷,至少執行一次
$i = 0;
do {
    echo $i;
} while ($i > 0); // 僅輸出 0

2. for 循環

// 標準形式
for ($i = 1; $i <= 10; $i++) {
    echo $i;
}

// 省略表達式(慎用)
for ($i = 1;; $i++) {
    if ($i > 10) break;
    echo $i;
}
  • expr1 初始化、expr2 條件判斷、expr3 迭代增量,均可為空。
  • 複雜邏輯優先考慮 while 或 foreach。

3. foreach 遍歷數組/對象(PHP 4+ 引入)

$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 可在循環中動態包含
}

四、函數定義與進階特性

1. 基礎語法

function foo($arg1, $arg2 = 'default') {
    echo "Example function\n";
    return $retval;
}

2. 返回值

  • 可返回任意類型(含數組、對象)。
  • 通過 return array(1,2,3) 實現多值返回,配合 list($a,$b,$c) = foo(); 解包。

3. 參數傳遞

  • 值傳遞(默認):函數內修改不影響外部變量。
  • 引用傳遞:函數定義參數加 &(function foo(&$bar))或調用時加 &(foo(&$str)),外部變量將被修改。
  • 默認參數:必須放在非默認參數之後(同 C++)。

4. 可變函數與匿名函數(PHP 5.3+)

$func = 'strlen';
echo $func('hello'); // 5

$anon = function($x) { return $x * 2; };
echo $anon(5); // 10

五、面向對象(PHP 5 重構核心)

1. 類定義與實例化

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);

2. 可見性

  • public:任意位置訪問。
  • protected:本類及子類訪問。
  • private:僅本類內部訪問。

3. 繼承與構造函數

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()。
  • 子類未定義構造函數將繼承父類構造函數。

4. 靜態成員與魔術方法

class Foo {
    public static $count = 0;
    public function __call($method, $args) { ... } // 攔截不可訪問方法
    public function __get($name) { ... } // 攔截不可訪問屬性讀取
    public function __set($name, $value) { ... } // 攔截不可訪問屬性寫入
}

六、最佳實踐提示

  • 嚴格區分 ==(鬆散比較)與 ===(嚴格比較),避免類型轉換陷阱。
  • 循環中避免重複計算不變量,大數組遍歷優先 foreach。
  • 類文件採用 PSR-4 自動加載,杜絕手動 require。
  • 函數單一職責,控制圈複雜度,善用類型聲明(PHP 7+)與嚴格模式。

掌握上述控制結構與 OOP 基礎,即可應對絕大多數 PHP 業務開發場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved