Bài 16: Class xử lý database trong hướng đối tượng (phần 2)

Ở bài trước chúng ta đã xây dựng xong lớp DB_driver dùng để xử lý thao tác trực tiếp với database, nhưng trong lớp đó chưa thể hiện được những tính chất trong lập trình hướng đối tượng. Vậy thì trong bài này chúng ta sẽ tiếp hành xây dựng một lớp Business kế thừa từ lớp Driver. Vì thế ngoài những hàm có sẵn ở lớp cha thì chúng ta sẽ tạo thêm một số hàm thông dụng để dễ thao tác hơn.

Trong lớp Business này chúng ta sẽ có một số thay đổi, lớp này sẽ đại diện cho một table trong database nên nó sẽ có các thuộc tính như tên table, tên field, khóa chính ... . Và còn rất nhiều thứ nhưng nếu trình bày hết sẽ rất dài dòng nên trong bài này mình chỉ trình bày một số điểm ngắn gọn nhưng sẽ dễ dàng hiểu bài yes

1. Cấu trúc lớp bussiness xử lý database

Dưới đây là cấu trúc các hàm trong thư viện của chúng ta:

require "DB_driver.php";


class DB_business extends DB_driver 
{
    // Tên Table
    protected $_table_name = '';
    
    // Tên Khóa Chính
    protected $_key = '';
    
    // Hàm Khởi Tạo
    function __construct() {
        parent::connect();
    }
    
    // Hàm ngắt kết nối
    function __destruct() {
        parent::dis_connect();
    }
    
    // Hàm xóa theo id
    function delete_by_id($table, $id){
        
    }
    // Hàm thêm mới
    function add_new($data){
    }    

    // Hàm cập nhật theo id
    function update_by_id($id){
        
    }
    
    // hàm select theo id
    function select_by_id($select, $id){
        
    }
}
Trong đó các bạn để ý rằng mình có khai báo 2 thuộc tính là $_table_name và $_key tương ứng với tên table và tên field khóa chính. Ngoài ra còn một số điểm như sau:

  • Hàm khởi tạo mình sẽ kết nối database luôn
  • Tại hàm hủy sẽ ngưng kết nối database
  • Có thêm ba hàm chính là insert, update, delete theo id

Hàm add_new

// Hàm thêm mới
function add_new($data){
    return parent::insert($this->_table_name, $data);
}

Hàm delete_by_id

// Hàm xóa theo id
function delete_by_id($id){
    return $this->remove($this->_table_name, $this->_key.'='.(int)$id);
}

Hàm update_by_id

// Hàm cập nhật theo id
function update_by_id($data, $id){
    return $this->update($this->_table_name, $data, $this->_key."=".(int)$id);
}

Hàm select_by_id

// hàm select theo id
function select_by_id($select, $id){
    $sql = "select $select from ".$this->_table_name." where ".$this->_key." = ".(int)$id;
    return $this->get_row($sql);
}

Như vậy thông qua lớp này mà ta đã ứng dụng được các tính chất trong lập trình hướng đối tượng, hàm khởi tạo và hàm hủy, tính kế thừa, ...

Sau đây là nội dung toàn file.

require "DB_driver.php";


class DB_business extends DB_driver 
{
    // Tên Table
    protected $_table_name = '';
    
    // Tên Khóa Chính
    protected $_key = '';
    
    // Hàm Khởi Tạo
    function __construct() {
        parent::connect();
    }
    
    // Hàm ngắt kết nối
    function __destruct() {
        parent::dis_connect();
    }
    
    // Hàm thêm mới
    function add_new($data){
        return parent::insert($this->_table_name, $data);
    }

    // Hàm xóa theo id
    function delete_by_id($id){
        return $this->remove($this->_table_name, $this->_key.'='.(int)$id);
    }

    // Hàm cập nhật theo id
    function update_by_id($data, $id){
        return $this->update($this->_table_name, $data, $this->_key."=".(int)$id);
    }

    // hàm select theo id
    function select_by_id($select, $id){
        $sql = "select $select from ".$this->_table_name." where ".$this->_key." = ".(int)$id;
        return $this->get_row($sql);
    }
}

2. Cách sử dụng thư viện xử lý database

Vì ở lớp trên đại diện cho mỗi table nên bây giờ chúng ta phải tạo một lớp đại diện chính xác table nào đó  rồi kế thừa từ lớp trên. Trong ví dụ trước mình sử dụng table customer nên trong phần này ta tiếp tục sử dụng database đó luôn nhé. Nội dung của file demo.php như sau:

require ('DB_business.php');

// Lớp khách hàng
class Customer extends DB_business 
{
    function __construct() 
    {
        // Khai báo tên bảng
        $this->_table_name = 'customer';
        
        // Khai báo tên field id
        $this->_key = 'id';
        
        // Gọi hàm khởi tạo cha
        parent::__construct();
    }
}

// Khởi tạo lớp khách hàng
$customer = new Customer();

// Thêm khách hàng
$customer->add_new(array(
    'name' => 'Nguyễn Văn Cường',
    'phone' => '0970 306 603'
));

// Xóa khách hàng
$customer->delete_by_id(1);

// Update khách hàng
$customer->update_by_id(array(
    'name' => 'thehalfheart'
), 2);

// Lấy chi tiết khách hàng
var_dump($customer->select_by_id('*', 2));

Qua phần comment chắc hẳn bạn cũng hiểu được bài rồi nên mình sẽ không giải thích gì thêm. Chỉ có một phần lưu ý là trong phần này mình sử dụng rất nhiều các tính chất của OOP nên nếu bạn chưa hiểu bài thì coi lại mấy bài trước nhé.

3. Lời kết

Đây là một ví dụ đơn giản về cách viết Class trong lập trình hướng đối tượng, ví dụ này chỉ mang tính tham khảo chứ mình không khuyến khích các bạn sử dụng nhé, vì sau này các bạn học lên PHP FW thì sẽ sử dụng những thư viện xử lý database mạnh hơn rất nhiều. Chúc các bạn vui vẻ.

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.