sql >> Database teknologi >  >> RDS >> Mysql

Bruger du klasser korrekt i andre klasser i php?

Der er et par måder at gøre det på. Globale variabler er bestemt en måde og den mest set ned på også. Du kan oprette en Singleton og alle andre klasser, der har brug for databaseadgang, ville kalde på denne singleton.

final class Database {
    private static $connection;

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

Og brug dette databaseforbindelsesobjekt i den klasse, der har brug for det.

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

Dette er alt sammen godt for en start og et stort skridt ud over at bruge globale variabler, men du kan gøre det bedre med Dependency Injection . Dependency Injection er et simpelt koncept, at hvis en klasse har eksterne afhængigheder, såsom databaseforbindelsen i dit eksempel, sender du dem eksplicit til den trængende klasse i dens konstruktør eller en metode. Så den nye kode ville ligne Jonathans løsning. En stor fordel ved at bruge afhængighedsinjektion er i enhedstestning, hvor du nemt kan erstatte dette faktiske databaseobjekt med et falsk objekt og videregive det til den, der har brug for det.

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);
    }
}

Ved mindre projekter kan du sagtens klare det selv. Til store projekter er der forskellige DI-frameworks tilgængelige for PHP



  1. Pearsons korrelationskoefficientformel i SQL

  2. php-forbindelse pooling mysql

  3. Fejl ved konvertering af XML fra en CLOB-kolonne til XMLType-kolonne

  4. Hvordan konverterer man en overordnet-underordnet (tilgrænsende) tabel til et indlejret sæt ved hjælp af PHP og MySQL?