Heim >Backend-Entwicklung >PHP-Tutorial >So greifen Sie über externe Klassen in PHP auf MySQLi zu: Überwinden interner Serverfehler mit Dependency Injection

So greifen Sie über externe Klassen in PHP auf MySQLi zu: Überwinden interner Serverfehler mit Dependency Injection

DDD
DDDOriginal
2024-10-28 14:32:02840Durchsuche

How to Access MySQLi from External Classes in PHP: Overcoming Internal Server Errors with Dependency Injection

MyISQL aus externen Klassen in PHP nutzen

Ihre Migration von PHP 5.6 auf 7.0 mit der entsprechenden Datenbankanpassung von MySql auf Mysqli hat einiges gebracht Herausforderungen. Hier gehen wir auf die zugrunde liegenden Probleme ein und bieten alternative Lösungen an.

Die Struktur verstehen

Zunächst haben Sie eine Datenbankklasse mit privaten Eigenschaften und einen Konstruktor dafür entwickelt eine Verbindung herstellen. Dieses Setup führt jedoch zu einer Trennung, wenn von anderen Klassen aus darauf zugegriffen wird.

Zweitens haben Sie eine API-Klasse, die für die Interaktion mit der Datenbank konzipiert ist, aber innerhalb ihres Konstruktors eine separate neue Instanziierung für die Datenbankverbindung verwendet.

Ursache des Fehlers: InternalInconsistencies

Wenn Sie in der API-Klasse auf $this->db->conn verweisen, wird Null abgerufen, was zu einem internen Serverfehler führt. Dies liegt daran, dass $this->db nur bei der Objekterstellung initialisiert wird und keine Verbindungsdaten behält.

Vorgeschlagene Lösung: Abhängigkeitsinjektion

Stattdessen Wenn Sie für jede Klasse eine separate Instanziierung wünschen, sollten Sie die Abhängigkeitsinjektion in Betracht ziehen. So geht's:

  1. Erstellen Sie eine eigenständige Datenbankklasse mit dem erforderlichen Verbindungsaufbaucode.
  2. Übergeben Sie eine Instanz dieses Datenbankobjekts als Konstruktorparameter an jede Klasse, die Datenbankzugriff erfordert.

Durch die Übernahme dieser Prinzipien können Sie MySQLi effektiv über mehrere Klassen hinweg in Ihrer PHP-Anwendung nutzen.

Beispielimplementierung

Datenbank .php:

<code class="php">$db = new mysqli("localhost", "DBUserName", "UserPassword", "SelectedDB");
$db->set_charset('utf8mb4');</code>

myapi.php:

<code class="php">class MyAPI {
    protected $db;
    
    public function __construct($db) {
        $this->db = $db;
    }
    
    // ... Rest of your code
}</code>

app.php:

<code class="php">require 'database.php';
require 'myapi.php';

$api = new MyAPI($db);
// Utilize the API as intended</code>

Diese Umstrukturierung stellt einen konsistenten Zugriff auf Datenbankressourcen in Ihrer gesamten Anwendung sicher und verringert die aufgetretenen internen Serverfehler.

Das obige ist der detaillierte Inhalt vonSo greifen Sie über externe Klassen in PHP auf MySQLi zu: Überwinden interner Serverfehler mit Dependency Injection. 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