Triển khai lớp cha của tất cả Model trong framework MVC tự xây dựng
Hãy cùng triển khai lớp cha cho tất cả các Model:
<?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)
{
// sẽ có code ở đây
}
protected function findMany($query)
{
// sẽ có code ở đây
}
}
?>
Như bạn thấy, trong constructor của lớp, chúng ta thực hiện kết nối đến cơ sở dữ liệu. Tuy nhiên, có một vấn đề: mỗi Model được tạo (nếu trong một hành động của controller có nhiều Model) sẽ thực hiện kết nối riêng của nó đến cơ sở dữ liệu, và điều này không tối ưu.
Hãy làm sao để kết nối đến
cơ sở dữ liệu chỉ được tạo cho Model đầu tiên,
còn các Model khác sử dụng kết nối đã
được tạo sẵn. Để làm điều này, chúng ta sẽ biến thuộc tính
link thành tĩnh:
<?php
namespace Core;
class Model
{
private static $link;
public function __construct()
{
if (!self::$link) { // nếu thuộc tính chưa được gán, thì kết nối
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)
{
}
}
?>
Sao chép code lớp Model đã cho
và đặt nó vào tệp /core/Model.php.
Triển khai phương thức findOne trong lớp này.
Kiểm tra hoạt động của nó.
Triển khai phương thức findMany trong lớp này.
Kiểm tra hoạt động của nó.