Heim >Backend-Entwicklung >PHP-Tutorial >Wie vermeide ich globale Variablen beim Zugriff auf ein Datenbankobjekt innerhalb einer Klasse?
Globale Variablen innerhalb einer Klasse verwenden
Das Erstellen von Paginierungsfunktionen erfordert den Zugriff auf ein Datenbankobjekt innerhalb einer Klasse. Der Versuch, auf eine externe Variable innerhalb der Klasse zuzugreifen, kann jedoch zu Fehlern führen. Lassen Sie uns mögliche Lösungen zur Behebung dieses Problems untersuchen.
Um den schwerwiegenden Fehler „Aufruf einer Mitgliedsfunktion query() für ein Nicht-Objekt“ zu beheben, muss das Datenbankobjekt innerhalb der Klasse zugänglich sein. Anstatt globale Variablen zu verwenden, besteht ein geeigneterer Ansatz darin, das Datenbankobjekt in die Klasse oder ihre Methoden einzufügen.
Abhängigkeitsinjektion
Eine Methode besteht darin, die Datenbank zu injizieren Objekt in den Klassenkonstruktor ein, wie unten gezeigt:
include_once("pagi.php"); $db = new DB_MySQL("localhost", "root", "", "test"); // connect to the database $pagination = new Paginator($db); $records = $pagination->get_records("SELECT * 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); } }
Dadurch kann die Paginierungsklasse auf das Datenbankobjekt zugreifen direkt.
Methodeninjektion
Eine andere Möglichkeit besteht darin, das Datenbankobjekt in die spezifische Methode zu injizieren, die es erfordert:
$pagination = new Paginator(); $records = $pagination->get_records("SELECT * FROM `table`", $db); class Paginator { public function get_records($q, DB_MySQL $db) { $x = $db->query($q); return $db->fetch($x); } }
Dies bietet mehr Flexibilität, wenn mehrere Methoden unterschiedliche Datenbankanforderungen haben.
Vorteile der Abhängigkeit Injektion
Im Vergleich zur Verwendung globaler Variablen bietet die Abhängigkeitsinjektion mehrere Vorteile:
Das obige ist der detaillierte Inhalt vonWie vermeide ich globale Variablen beim Zugriff auf ein Datenbankobjekt innerhalb einer Klasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!