Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengelakkan Ralat 'Panggil ke pertanyaan fungsi ahli () pada bukan objek' Menggunakan Suntikan Ketergantungan?
Apabila membina fungsi penomboran, anda mungkin menghadapi ralat "Panggil ke pertanyaan fungsi ahli() pada bukan objek." Ini selalunya berpunca daripada mengakses pembolehubah yang diisytiharkan di luar kelas dari dalam kelas itu sendiri. Mari terokai penyelesaian yang lebih baik.
Suntikan kebergantungan menyediakan penyelesaian yang bersih. Daripada bergantung pada pembolehubah global, kami menghantar objek yang diperlukan (seperti sambungan pangkalan data) terus ke kelas. Ini dilakukan melalui pembina:
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // Database connection include_once("pagi.php"); $pagination = new Paginator($db); $records = $pagination->get_records("SELECT the, fields, you, want, to retrieve FROM `table`"); class Paginator { protected $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>
Sebagai alternatif, anda boleh menyuntik objek pangkalan data terus ke dalam kaedah yang memerlukannya:
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // Database connection include_once("pagi.php"); $pagination = new Paginator(); $records = $pagination->get_records("SELECT the, fields, you, want, to retrieve FROM `table`", $db); class Paginator { public function get_records($q, DB_MySQL $db) { $x = $db->query($q); return $db->fetch($x); } }</code>
Suntikan kebergantungan menawarkan kelebihan yang ketara berbanding menggunakan pembolehubah global:
Ringkasnya, suntikan kebergantungan ialah amalan terbaik untuk mengurus kebergantungan dan sumber yang dikongsi, mempromosikan kod yang lebih bersih, lebih mantap dan boleh diuji. Elakkan perangkap pembolehubah global dengan menggunakan pendekatan ini.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat 'Panggil ke pertanyaan fungsi ahli () pada bukan objek' Menggunakan Suntikan Ketergantungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!