Implementacja rodzica wszystkich modeli we własnym frameworku MVC

Zaimplementujmy nadrzędną klasę wszystkich modeli:

/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)
    {
      // tutaj będzie jakiś kod
    }
    
    protected function findMany($query)
    {
      // tutaj będzie jakiś kod
    }
  }
?>

Jak widzicie, w konstruktorze klasy realizujemy połączenie z bazą danych. Jest jednak problem: każdy tworzony model (jeśli w ramach jednego działania kontrolera będzie kilka modeli) będzie wykonywać własne połączenie z bazą danych, a to nie jest optymalne.

Zróbmy tak, aby połączenie z bazą tworzyło się tylko dla pierwszego utworzonego modelu, a pozostałe modele wykorzystywały już utworzone połączenie. W tym celu właściwość link zróbmy statyczną:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // jeśli właściwość nie jest ustawiona, to łączymy się
        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

Skopiujcie podany kod klasy Model i umieśćcie go w pliku /core/Model.php.

Задание 2

Zaimplementuj metodę findOne w tej klasie. Sprawdź jej działanie.

Задание 3

Zaimplementuj metodę findMany w tej klasie. Sprawdź jej działanie.