Barcha modellar uchun ota-klassni amalga oshirish

Keling, barcha modellar uchun ota-klassni yaratamiz:

/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)
    {
      // bu yerda qandaydir kod bo'ladi
    }
    
    protected function findMany($query)
    {
      // bu yerda qandaydir kod bo'ladi
    }
  }
?>

Ko'rib turganingizdek, klass konstruktorida biz ma'lumotlar bazasiga ulanishni amalga oshiramiz. Biroq, muammo shundaki: har bir yaratilgan model (agar kontrollerning bir harakatida bir nechta modellar bo'lsa) o'zining ma'lumotlar bazasiga ulanishini yaratadi va bu optimal emas.

Keling, shunday qilaylikki, ma'lumotlar bazasiga ulanish faqat birinchi yaratilgan model uchun yaratilsin, qolgan modellar esa allaqachon yaratilgan ulanishdan foydalansin. Buning uchun link xususiyatini statik qilamiz:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // agar xususiyat belgilanmagan bo'lsa, ulanamiz
        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 klassining keltirilgan kodini nusxalang va uni /core/Model.php faylida joylashtiring.

Задание 2

Ushbu klassda findOne metodini amalga oshiring. Uning ishlashini tekshiring.

Задание 3

Ushbu klassda findMany metodini amalga oshiring. Uning ishlashini tekshiring.