sql >> Database >  >> RDS >> Mysql

Klassen in andere klassen op de juiste manier gebruiken in php?

Er zijn een aantal manieren om dat te doen. Globale variabelen zijn zeker een manier en er wordt ook het meest op neergekeken. U kunt een Singleton maken en alle andere klassen die toegang tot de database nodig hebben, zouden een beroep doen op deze singleton.

final class Database {
    private static $connection;

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

En gebruik dit databaseverbindingsobject in elke klasse die het nodig heeft.

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

Dit is allemaal goed om te beginnen en een grote stap verder dan het gebruik van globale variabelen, maar je kunt het beter doen met Dependency Injection . Dependency Injection is een eenvoudig concept dat als een klasse externe afhankelijkheden heeft, zoals de databaseverbinding in uw voorbeeld, u deze expliciet doorgeeft aan de behoeftige klasse in zijn constructor of een methode. Dus de nieuwe code zou er ongeveer uitzien als de oplossing van Jonathan. Een groot voordeel van het gebruik van afhankelijkheidsinjectie is het testen van eenheden, waarbij u dit werkelijke database-object eenvoudig kunt vervangen door een nep-object en het kunt doorgeven aan wie het nodig heeft.

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

Voor kleinere projecten kunt u het eenvoudig zelf doen. Voor grote projecten zijn er verschillende DI-frameworks beschikbaar voor PHP



  1. Een string splitsen in MySQL

  2. Hoe gegevens met dynamisch aantal attributen in een database op te slaan

  3. Spotlight Cloud-ondersteuning voor Azure SQL DB-aankondiging (preview)

  4. Entity Framework 6 met Npgsql