Implementácia rodiča všetkých modelov vo vlastnom MVC frameworku

Poďme implementovať rodičovskú triedu všetkých modelov:

/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)
    {
      // tu bude nejaký kód
    }
    
    protected function findMany($query)
    {
      // tu bude nejaký kód
    }
  }
?>

Ako vidíte, v konštruktore triedy vykonávame pripojenie k databáze. Existuje však problém: každý vytvorený model (ak v rámci jednej akcie kontrolera bude niekoľko modelov) vytvorí svoje vlastné pripojenie k databáze, čo nie je optimálne.

Urobme to tak, aby sa pripojenie k databáze vytvorilo len pre prvý vytvorený model a ostatné modely použili už vytvorené pripojenie. Na to urobme vlastnosť link statickou:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // ak vlastnosť nie je nastavená, tak sa pripojíme
        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

Skopírujte uvedený kód triedy Model a umiestnite ho do súboru /core/Model.php.

Задание 2

Implementujte metódu findOne v tejto triede. Skontrolujte jej fungovanie.

Задание 3

Implementujte metódu findMany v tejto triede. Skontrolujte jej fungovanie.