Implementarea părintelui tuturor modelelor în propriul framework MVC

Să implementăm clasa părinte a tuturor modelelor:

/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)
    {
      // aici va fi un cod
    }
    
    protected function findMany($query)
    {
      // aici va fi un cod
    }
  }
?>

După cum vedeți, în constructorul clasei realizăm conexiunea la baza de date. Există, totuși, o problemă: fiecare model creat (dacă în interiorul unei acțiuni a controllerului vor fi mai multe modele) va face propria conexiune la baza de date, iar acest lucru nu este optim.

Să facem astfel încât conexiunea la baza de date să fie creată doar pentru primul model creat și restul modelelor să utilizeze conexiunea deja creată. Pentru aceasta, proprietatea link o vom face statică:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // dacă proprietatea nu este setată, atunci ne conectăm
        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

Copiați codul clasei Model și plasați-l în fișierul /core/Model.php.

Задание 2

Implementați metoda findOne în această clasă. Verificați funcționarea ei.

Задание 3

Implementați metoda findMany în această clasă. Verificați funcționarea ei.