Implementacija roditelja svih modela u sopstvenom MVC frejmvoru

Hajde da implementiramo roditeljsku klasu svih modela:

/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)
    {
      // ovde će biti neki kod
    }
    
    protected function findMany($query)
    {
      // ovde će biti neki kod
    }
  }
?>

Kao što vidite, u konstruktoru klase obavljamo povezivanje na bazu podataka. Međutim, postoji problem: svaki kreirani model (ako unutar jedne akcije kontrolera bude nekoliko modela) će napraviti svoju konekciju na bazu podataka, a to nije optimalno.

Hajde da uradimo tako da se konekcija na bazu kreira samo za prvi napravljeni model, a ostali modeli koriste već postojeću konekciju. Da bismo to uradili, svojstvo link ćemo napraviti statičkim:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // ako svojstvo nije postavljeno, onda se povezujemo
        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

Kopirajte dat kod klase Model i smestite ga u fajl /core/Model.php.

Задание 2

Implementirajte metodu findOne u ovoj klasi. Proverite njen rad.

Задание 3

Implementirajte metodu findMany u ovoj klasi. Proverite njen rad.