Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengelak Pembolehubah Global Apabila Mengakses Pangkalan Data dalam Kelas PHP?

Bagaimanakah Saya Boleh Mengelak Pembolehubah Global Apabila Mengakses Pangkalan Data dalam Kelas PHP?

Linda Hamilton
Linda Hamiltonasal
2025-01-18 00:17:09354semak imbas

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

Elakkan menggunakan pembolehubah global apabila mengakses pangkalan data dalam kelas PHP

Kod anda mengalami ralat semasa cuba mengakses pembolehubah global pagi dalam kaedah kelas $db. Ralat ini menunjukkan bahawa kaedah query() dipanggil pada bukan objek, yang menunjukkan bahawa pembolehubah $db tidak tersedia dalam kelas.

Penyelesaian Suntikan Kebergantungan

Cara yang disyorkan untuk menyelesaikan masalah ini ialah menggunakan suntikan kebergantungan dan lulus objek pangkalan data sebagai parameter ke dalam kelas dan bukannya bergantung pada pembolehubah global. Contohnya adalah seperti berikut:

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

Dalam contoh ini, kami mencipta kelas baharu yang dipanggil Paginator yang melepasi objek DB_MySQL sebagai kebergantungan melalui pembina. Ini menyuntik contoh pangkalan data ke dalam kelas, menjadikannya tersedia untuk kaedah di dalamnya.

Kelebihan Suntikan Ketergantungan

Menggunakan suntikan pergantungan mempunyai kelebihan berikut:

  • Penyahgandingan: Ia mengasingkan kelas daripada pergantungan langsungnya pada kelas DB_MySQL, menjadikannya lebih fleksibel dan lebih mudah untuk diuji.
  • Kebolehujian: Ujian unit menjadi lebih mudah kerana anda boleh mengejek kebergantungan dan mengasingkan kelas ujian.
  • Elakkan kebergantungan tersembunyi: Tidak seperti menggunakan kata kunci global, suntikan ketergantungan menjelaskan bahawa kelas bergantung pada kebergantungan tertentu.

Kaedah lain

Cara lain untuk mengakses objek pangkalan data adalah dengan menyuntiknya terus ke dalam kaedah yang memerlukannya, seperti ini:

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

Walau bagaimanapun, suntikan pergantungan melalui pembina biasanya lebih disukai kerana ia memberikan pengkapsulan dan kebolehujian yang lebih baik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelak Pembolehubah Global Apabila Mengakses Pangkalan Data dalam Kelas PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn