„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie vermeide ich globale Variablen beim Zugriff auf ein Datenbankobjekt innerhalb einer Klasse?

Wie vermeide ich globale Variablen beim Zugriff auf ein Datenbankobjekt innerhalb einer Klasse?

Veröffentlicht am 21.12.2024
Durchsuche:687

How to Avoid Global Variables When Accessing a Database Object within a Class?

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:

  • Explizit definierte Abhängigkeiten: Es macht deutlich, welche Objekte von anderen abhängen, und eliminiert versteckte Abhängigkeiten.
  • Lose Kopplung: Die Klasse kann zu Testzwecken problemlos zu einem anderen oder simulierten Datenbankobjekt wechseln.
  • Testbarkeit: Unit-Tests können sich ausschließlich auf die Klasse konzentrieren, ohne die Datenbank zu beeinträchtigen Funktionalität.
  • Erweiterbarkeit: Es ermöglicht die Verwendung mehrerer Datenbanken oder anderer Frameworks ohne größere Codeänderungen.
Neuestes Tutorial Mehr>

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