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
Lepaskan: 2025-01-18 00:17:09
asal
352 orang telah melayarinya

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>
Salin selepas log masuk
<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>
Salin selepas log masuk

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>
Salin selepas log masuk
<code class="language-php">class Paginator
{
    public function get_records($q, DB_MySQL $db)
    {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan