從資料庫讀取多筆資料輸出 HTML 表格時,若所有列背景色相同,視覺上難以辨識行與行之間的界限。傳統做法在迴圈中用 $i % 2 判斷奇偶,但若函式被多次呼叫或巢狀迴圈,計數器管理容易出錯。
PHP 函式內的 static 變數在首次呼叫時初始化,之後保持值不銷毀,下次呼叫時繼續使用上次的值。利用此特性,可將「當前顏色狀態」封裝在函式內部,呼叫端無需維護計數器。
<?php
function getRowColor() {
static $color = '#ffffff'; // 初始為白色
$color = ($color === '#ffffff') ? '#f0f0f0' : '#ffffff'; // 切換
return $color;
}
// 輸出 10 列示範
echo "<table border='1' cellpadding='5' cellspacing='0'>\n";
for ($i = 0; $i < 10; $i++) {
$bg = getRowColor();
echo " <tr bgcolor='$bg'>\n";
echo " <td>第 " . ($i+1) . " 列資料</td>\n";
echo " </tr>\n";
}
echo "</table>\n";
?>
#ffffff(白)#f0f0f0(淡灰)#ffffff……以此類推若在同一頁面多處呼叫 getRowColor(),顏色會跨區塊連續交替,不會重置。若需區塊獨立,可改用 static $colors = ['#fff','#f0f0f0']; static $idx = 0; return $colors[$idx++ % 2]; 並配合參數重置。
純前端實現更簡潔、效能更好,無需 PHP 邏輯:
<style>
table.zebra tbody tr:nth-child(odd) { background: #fff; }
table.zebra tbody tr:nth-child(even) { background: #f0f0f0; }
</style>
<table class="zebra">
<tbody>
<tr><td>資料 1</td></tr>
<tr><td>資料 2</td></tr>
...
</tbody>
</table>
優點:結構與樣式分離、支援動態新增/刪除列自動重算、無伺服器端運算負擔。
static 變數是 PHP 函式保持狀態的輕量機制,適用於計數器、單例模式、快取等場景。但現代開發中,表格斑馬紋建議交由 CSS :nth-child() 處理,符合關注點分離原則。