Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengelak Pembolehubah Global Apabila Mengakses Pangkalan Data dalam Kelas PHP?
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:
DB_MySQL
, menjadikannya lebih fleksibel dan lebih mudah untuk diuji. 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!