首頁 >資料庫 >mysql教程 >在 PHP 類別中存取資料庫時如何避免全域變數?

在 PHP 類別中存取資料庫時如何避免全域變數?

Linda Hamilton
Linda Hamilton原創
2025-01-18 00:17:09403瀏覽

How Can I Avoid Global Variables When Accessing a Database in a PHP Class?

避免在PHP類別中存取資料庫時使用全域變數

你的程式碼在嘗試存取pagi類別方法中的全域變數$db時遇到錯誤。此錯誤表明query()方法在一個非物件上被調用,這表明$db變數在類別中不可用。

依賴注入解

解決此問題的建議方法是採用依賴注入,將資料庫物件作為參數傳遞到類別中,而不是依賴全域變數。例如下:

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test");
include_once("pagi.php");

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT * FROM `table`");</code>
<code class="language-php">class Paginator
{
    private $db;

    public function __construct(DB_MySQL $db)
    {
        $this->db = $db;
    }

    public function get_records($q)
    {
        $x = $this->db->query($q);
        return $this->db->fetch($x);
    }
}</code>

在這個例子中,我們建立了一個名為Paginator的新類,它透過建構函式將DB_MySQL物件作為依賴項傳入。這將資料庫執行個體注入到類別中,使其可用於其中的方法。

依賴注入的優勢

使用依賴注入有以下幾個優點:

  • 解耦: 它將類別與對DB_MySQL類別的直接依賴解耦,使其更靈活,更容易測試。
  • 可測試性: 單元測試變得更容易,因為您可以模擬依賴項並隔離測試類別。
  • 避免隱藏依賴項: 與使用global關鍵字不同,依賴注入清楚地表明該類別依賴於特定的依賴項。

其他方法

存取資料庫物件的另一種方法是將其直接注入到需要它的方法中,如下所示:

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test");
include_once("pagi.php");

$pagination = new Paginator();
$records = $pagination->get_records("SELECT * FROM `table`", $db);</code>
<code class="language-php">class Paginator
{
    public function get_records($q, DB_MySQL $db)
    {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}</code>

但是,通常更傾向於透過建構函式進行依賴注入,因為它提供了更好的封裝性和可測試性。

以上是在 PHP 類別中存取資料庫時如何避免全域變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn