Bài 16: Class xử lý database trong hướng đối tượng (phần 2) - Học lập trình PHP nâng cao
Ở 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 ...
Ở 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
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){ } }
_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ẻ.