Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng hợp lý các lớp trong các lớp khác trong php?

Có một số cách để làm điều đó. Biến toàn cục chắc chắn là một cách và cũng là một cách bị coi thường nhất. Bạn có thể tạo Singleton và tất cả các lớp khác cần truy cập cơ sở dữ liệu sẽ gọi đến singleton này.

final class Database {
    private static $connection;

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

Và sử dụng đối tượng kết nối cơ sở dữ liệu này trong bất kỳ lớp nào cần nó.

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

Điều này là tốt cho một khởi đầu và một bước tiến tuyệt vời ngoài việc sử dụng các biến toàn cục, nhưng bạn có thể làm tốt hơn với Dependency Injection . Dependency Injection là một khái niệm đơn giản mà nếu một lớp có bất kỳ phụ thuộc bên ngoài nào, chẳng hạn như kết nối cơ sở dữ liệu trong ví dụ của bạn, thì bạn chuyển rõ ràng chúng cho lớp cần thiết trong phương thức khởi tạo hoặc phương thức của nó. Vì vậy, mã mới sẽ giống như giải pháp của Jonathan. Một lợi thế chính của việc sử dụng tính năng phụ thuộc là trong thử nghiệm đơn vị, nơi bạn có thể dễ dàng thay thế đối tượng cơ sở dữ liệu thực tế này bằng một đối tượng giả và chuyển nó cho bất kỳ ai cần.

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

Đối với các dự án nhỏ hơn, bạn có thể dễ dàng tự làm. Đối với các dự án lớn, có nhiều DI khung cho 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. Sử dụng Python và MySQL trong Quy trình ETL

  2. Chọn một phần từ Trường Blob MySQL

  3. Cách chèn dữ liệu vào mysql bằng Java

  4. MySQL - Phương pháp tốt nhất để xử lý dữ liệu phân cấp này?

  5. phpMyAdmin bị lỗi # 2002 không thể đăng nhập vào máy chủ mysql phpmyadmin