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

PHP 靜態變數妙用:實現表格斑馬紋隔行換色

     編輯:PHP 綜合知識

問題場景

從資料庫讀取多筆資料輸出 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";
?>

執行結果說明

  • 第 1 列:#ffffff(白)
  • 第 2 列:#f0f0f0(淡灰)
  • 第 3 列:#ffffff……以此類推

若在同一頁面多處呼叫 getRowColor(),顏色會跨區塊連續交替,不會重置。若需區塊獨立,可改用 static $colors = ['#fff','#f0f0f0']; static $idx = 0; return $colors[$idx++ % 2]; 並配合參數重置。

現代 CSS 替代方案(推薦)

純前端實現更簡潔、效能更好,無需 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() 處理,符合關注點分離原則。

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