Имплементация на родител на всички модели

Нека да реализираме родителския клас на всички модели:

/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)
    {
      // тук ще има някакъв код
    }
    
    protected function findMany($query)
    {
      // тук ще има някакъв код
    }
  }
?>

Както виждате, в конструктора на класа ние осъществяваме връзка с базата данни. Има, обаче, проблем: всеки създаден модел (ако в рамките на едно действие на контролера има няколко модела) ще направи своя собствена връзка с базата данни, а това не е оптимално.

Нека да направим така, че връзката с базата данни да се създава само за първия създаден модел, а останалите модели да използват вече създадената връзка. За целта свойството link ще направим статично:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // ако свойството не е зададено, тогава се свързваме
        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

Копирайте дадения код на класа Model и го поставете във файла /core/Model.php.

Задание 2

Реализирайте метода findOne в този клас. Проверете неговата работа.

Задание 3

Реализирайте метода findMany в този клас. Проверете неговата работа.