การใช้งานคลาสแม่ของโมเดลทั้งหมดใน MVC framework ที่สร้างเอง

มาสร้างคลาสแม่สำหรับโมเดลทั้งหมดกัน:

/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)
    {
      // จะมีโค้ดบางอย่างที่นี่
    }
    
    protected function findMany($query)
    {
      // จะมีโค้ดบางอย่างที่นี่
    }
  }
?>

อย่างที่คุณเห็น ใน constructor ของคลาสเราได้ทำการเชื่อมต่อกับฐานข้อมูล อย่างไรก็ตาม มีปัญหาอยู่อย่างหนึ่ง: ทุก ๆ โมเดลที่ถูกสร้างขึ้น (หากภายในหนึ่งการกระทำของ controller มีหลายโมเดล) จะทำการเชื่อมต่อกับฐานข้อมูลของตัวเอง ซึ่งไม่ใช่สิ่งที่ดีที่สุด

มาทำให้การเชื่อมต่อกับฐานข้อมูลถูกสร้างขึ้นสำหรับโมเดลแรกที่ถูกสร้างเท่านั้น และโมเดลอื่น ๆ ที่ตามมาจะใช้การเชื่อมต่อที่ถูกสร้างขึ้นแล้วกัน เพื่อการนี้ ให้เปลี่ยนคุณสมบัติ link ให้เป็น static:

/core/Model.php<?php
  namespace Core;
  
  class Model
  {
    private static $link;
    
    public function __construct()
    {
      if (!self::$link) { // หากคุณสมบัตินี้ยังไม่ได้ถูกกำหนดค่า ให้ทำการเชื่อมต่อ
        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 ที่ให้ไว้และวางไว้ในไฟล์ /core/Model.php

Задание 2

ให้ใช้งาน method findOne ในคลาสนี้ ทดสอบการทำงานของมัน

Задание 3

ให้ใช้งาน method findMany ในคลาสนี้ ทดสอบการทำงานของมัน