Triển khai lớp cha của tất cả Model trong framework MVC tự xây dựng

Hãy cùng triển khai lớp cha cho tất cả các Model:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private $link;
    
    public function __construct()
    {
      $this->link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
      mysqli_query($this->link, "SET NAMES 'utf8'");
    }
    
    protected function findOne($query)
    {
      // sẽ có code ở đây
    }
    
    protected function findMany($query)
    {
      // sẽ có code ở đây
    }
  }
?>

Như bạn thấy, trong constructor của lớp, chúng ta thực hiện kết nối đến cơ sở dữ liệu. Tuy nhiên, có một vấn đề: mỗi Model được tạo (nếu trong một hành động của controller có nhiều Model) sẽ thực hiện kết nối riêng của nó đến cơ sở dữ liệu, và điều này không tối ưu.

Hãy làm sao để kết nối đến cơ sở dữ liệu chỉ được tạo cho Model đầu tiên, còn các Model khác sử dụng kết nối đã được tạo sẵn. Để làm điều này, chúng ta sẽ biến thuộc tính link thành tĩnh:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // nếu thuộc tính chưa được gán, thì kết nối
        self::$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        mysqli_query(self::$link, "SET NAMES 'utf8'");
      }
    }
    
    protected function findOne($query)
    {
      
    }
    
    protected function findMany($query)
    {
      
    }
  }
?>
Задание 1

Sao chép code lớp Model đã cho và đặt nó vào tệp /core/Model.php.

Задание 2

Triển khai phương thức findOne trong lớp này. Kiểm tra hoạt động của nó.

Задание 3

Triển khai phương thức findMany trong lớp này. Kiểm tra hoạt động của nó.