การใช้งานคลาสแม่ของโมเดลทั้งหมดใน MVC framework ที่สร้างเอง
มาสร้างคลาสแม่สำหรับโมเดลทั้งหมดกัน:
<?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:
<?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)
{
}
}
?>
คัดลอกรหัสของคลาส Model ที่ให้ไว้และวางไว้ในไฟล์ /core/Model.php
ให้ใช้งาน method findOne ในคลาสนี้ ทดสอบการทำงานของมัน
ให้ใช้งาน method findMany ในคลาสนี้ ทดสอบการทำงานของมัน