Heim >Datenbank >MySQL-Tutorial >Wie vermeide ich den Fehler „Aufruf einer Mitgliedsfunktion query() für ein Nicht-Objekt' mithilfe der Abhängigkeitsinjektion?
Beim Erstellen der Paginierungsfunktionalität kann der Fehler „Aufruf einer Mitgliedsfunktion query() für ein Nicht-Objekt“ auftreten. Dies ist häufig auf den Zugriff auf außerhalb einer Klasse deklarierte Variablen innerhalb der Klasse selbst zurückzuführen. Lassen Sie uns nach besseren Lösungen suchen.
Abhängigkeitsinjektion bietet eine saubere Lösung. Anstatt uns auf globale Variablen zu verlassen, übergeben wir die erforderlichen Objekte (wie die Datenbankverbindung) direkt an die Klasse. Dies geschieht über den Konstruktor:
<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>
Alternativ können Sie das Datenbankobjekt direkt in die Methode einfügen, die es benötigt:
<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>
Abhängigkeitsinjektion bietet erhebliche Vorteile gegenüber der Verwendung globaler Variablen:
Zusammenfassend lässt sich sagen, dass die Abhängigkeitsinjektion eine bewährte Methode zur Verwaltung von Abhängigkeiten und gemeinsam genutzten Ressourcen ist und saubereren, robusteren und testbareren Code fördert. Vermeiden Sie die Fallstricke globaler Variablen, indem Sie diesen Ansatz übernehmen.
Das obige ist der detaillierte Inhalt vonWie vermeide ich den Fehler „Aufruf einer Mitgliedsfunktion query() für ein Nicht-Objekt' mithilfe der Abhängigkeitsinjektion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!