Verwenden globaler Variablen innerhalb einer Klasse
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. Sehen wir uns mögliche Lösungen zur Behebung dieses Problems an.
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, 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 direkt auf das Datenbankobjekt zugreifen.
Methodeninjektion
Eine andere Möglichkeit besteht darin, das Datenbankobjekt in das spezifische einzufügen Methode, 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ängigkeitsinjektion
Im Vergleich zur Verwendung globaler Variablen bietet die Abhängigkeitsinjektion mehrere Vorteile:
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3