Heim >Backend-Entwicklung >PHP-Tutorial >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?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-22 15:00:20168Durchsuche

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

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:

  • Explizit definierte Abhängigkeiten:Es macht deutlich, welche Objekte von anderen abhängig sind , wodurch versteckte Abhängigkeiten beseitigt werden.
  • Lose Kopplung: Die Klasse kann problemlos Wechseln Sie zu Testzwecken zu einem anderen oder simulierten Datenbankobjekt.
  • Testbarkeit: Unit-Tests können sich ausschließlich auf die Klasse konzentrieren, ohne die Datenbankfunktionalität zu beeinträchtigen.
  • Erweiterbarkeit :Es ermöglicht die Nutzung mehrerer Datenbanken oder anderer Frameworks ohne größere Codeänderungen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn