Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Klassen in anderen Klassen in PHP richtig verwenden?

Dafür gibt es mehrere Möglichkeiten. Globale Variablen sind sicherlich ein Weg und der, auf den am meisten herabgesehen wird. Sie können ein Singleton erstellen und alle anderen Klassen, die Datenbankzugriff benötigen, würden dieses Singleton aufrufen.

final class Database {
    private static $connection;

    public static function getInstance() {
        if(self::$connection == NULL) {
            self::$connection = // init your database connection
        }
        return self::$connection;
    }
}

Und verwenden Sie dieses Datenbankverbindungsobjekt in jeder Klasse, die es benötigt.

class Application {
    public function displayVar() {
        echo 'hello world';
    }
    public function getVar() {
        $db = Database::getInstance();
        $sql = foo;
        $db->query($sql);
    }
}

Das ist alles gut für den Anfang und ein großer Schritt über die Verwendung globaler Variablen hinaus, aber Sie können es mit Abhängigkeitsinjektion . Abhängigkeitsinjektion ist ein einfaches Konzept, bei dem Sie, wenn eine Klasse externe Abhängigkeiten hat, z. B. die Datenbankverbindung in Ihrem Beispiel, diese explizit an die benötigte Klasse in ihrem Konstruktor oder einer Methode übergeben. Der neue Code würde also in etwa so aussehen wie Jonathans Lösung. Ein großer Vorteil der Verwendung von Abhängigkeitsinjektionen ist das Testen von Einheiten, wo Sie dieses tatsächliche Datenbankobjekt einfach durch ein Scheinobjekt ersetzen und an jeden weitergeben können, der es benötigt.

class Application {
    private $db;

    public function __construct(Database $db) {
        $this->db = $db;
    }

    public function displayVar() {
        echo 'hello world';
    }

    public function getVar() {
        $sql = foo;
        $this->db->query($sql);
    }
}

Bei kleineren Projekten können Sie das ganz einfach selbst machen. Für große Projekte stehen verschiedene DI-Frameworks für PHP zur Verfügung