Mysql
 sql >> база данни >  >> RDS >> Mysql

Използвате ли правилно класове в други класове в php?

Има няколко начина да направите това. Глобалните променливи със сигурност са един от начините и са най-пренебрегвани. Можете да създадете Singleton и всички останали класове, които се нуждаят от достъп до база данни, ще извикат този сингълтон.

final class Database {
    private static $connection;

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

И използвайте този обект за връзка към базата данни във всеки клас, който има нужда от него.

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

Всичко това е добре за начало и чудесна стъпка отвъд използването на глобални променливи, но можете да направите по-добре с Инжекция на зависимост . Инжектирането на зависимост е проста концепция, че ако даден клас има някакви външни зависимости, като връзката към базата данни във вашия пример, вие изрично ги предавате на нуждаещия се клас в неговия конструктор или метод. Така че новият код ще изглежда нещо като решението на Джонатан. Основно предимство на използването на инжектиране на зависимост е тестването на модули, където можете лесно да замените този действителен обект на база данни с фалшив обект и да го предадете на всеки, който има нужда от него.

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

За по-малки проекти можете лесно да го направите сами. За големи проекти има различни DI рамки, налични за PHP



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql - някакъв начин да помогнете на пълнотекстово търсене с друг индекс?

  2. mysql заявка за получаване на рождени дни за следващите 10 дни

  3. Свързването с MySQL причинява грешка Името на източника на данни не е намерено и не е посочен драйвер по подразбиране

  4. Грешка при вмъкване на MySQL:ER_BAD_FIELD_ERROR:Неизвестна колона „2525“ в „списък с полета“

  5. Как да използвам псевдоними в математически оператори в SQL?