Heim > Datenbank > MySQL-Tutorial > Wie kann ich globale Variablen beim Zugriff auf eine Datenbank in einer PHP-Klasse vermeiden?

Wie kann ich globale Variablen beim Zugriff auf eine Datenbank in einer PHP-Klasse vermeiden?

Linda Hamilton
Freigeben: 2025-01-18 00:17:09
Original
352 Leute haben es durchsucht

How Can I Avoid Global Variables When Accessing a Database in a PHP Class?

Vermeiden Sie die Verwendung globaler Variablen beim Zugriff auf die Datenbank in PHP-Klassen

In Ihrem Code ist beim Versuch, auf eine globale Variable pagi in einer $db-Klassenmethode zuzugreifen, ein Fehler aufgetreten. Dieser Fehler weist darauf hin, dass die Methode query() für ein Nicht-Objekt aufgerufen wurde, was darauf hinweist, dass die Variable $db in der Klasse nicht verfügbar ist.

Abhängigkeitsinjektionslösung

Der empfohlene Weg, dieses Problem zu lösen, besteht darin, die Abhängigkeitsinjektion zu verwenden und das Datenbankobjekt als Parameter an die Klasse zu übergeben, anstatt sich auf globale Variablen zu verlassen. Ein Beispiel ist wie folgt:

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test");
include_once("pagi.php");

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT * FROM `table`");</code>
Nach dem Login kopieren
<code class="language-php">class Paginator
{
    private $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>
Nach dem Login kopieren

In diesem Beispiel erstellen wir eine neue Klasse namens Paginator, die das DB_MySQL-Objekt als Abhängigkeit über den Konstruktor übergibt. Dadurch wird die Datenbankinstanz in die Klasse eingefügt und für die darin enthaltenen Methoden verfügbar gemacht.

Vorteile der Abhängigkeitsinjektion

Die Verwendung der Abhängigkeitsinjektion hat die folgenden Vorteile:

  • Entkopplung: Es entkoppelt eine Klasse von ihrer direkten Abhängigkeit von der DB_MySQL-Klasse, wodurch sie flexibler und einfacher zu testen ist.
  • Testbarkeit: Unit-Tests werden einfacher, da Sie Abhängigkeiten simulieren und Testklassen isolieren können.
  • Versteckte Abhängigkeiten vermeiden: Im Gegensatz zur Verwendung des Schlüsselworts global macht die Abhängigkeitsinjektion deutlich, dass die Klasse von einer bestimmten Abhängigkeit abhängt.

Andere Methoden

Eine andere Möglichkeit, auf das Datenbankobjekt zuzugreifen, besteht darin, es direkt in die Methode einzufügen, die es benötigt, wie folgt:

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test");
include_once("pagi.php");

$pagination = new Paginator();
$records = $pagination->get_records("SELECT * FROM `table`", $db);</code>
Nach dem Login kopieren
<code class="language-php">class Paginator
{
    public function get_records($q, DB_MySQL $db)
    {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}</code>
Nach dem Login kopieren

Im Allgemeinen wird jedoch die Abhängigkeitsinjektion über Konstruktoren bevorzugt, da sie eine bessere Kapselung und Testbarkeit bietet.

Das obige ist der detaillierte Inhalt vonWie kann ich globale Variablen beim Zugriff auf eine Datenbank in einer PHP-Klasse vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage