1
OOP trong PHP
OOP là viết tắt của object oriented programming, là một
phương pháp lập trình được sử dụng phổ biến.
Chương trình được viết theo phương pháp hướng đối tượng có
tính tiến hóa, dễ mở rộng, dễ bảo trì và mã nguồn có tính tái sử dụng cao.
Một số kiến thức quan trọng cần tìm hiểu về phương pháp lập
trình hướng đối tượng gồm:
– Làm sao để tạo lớp (class), tạo đối tượng (object)
– Tính đóng gói (encapsulation), hay che dấu dữ liệu (data
hiding)
– Tính kế thừa (inheritance)
– Tính đa hình (polymorphism)
1.1
Làm sao để tạo lớp, tạo đối tượng
Đối tượng (object) là các thực thể trong thế giới thực (ví dụ:
máy tính, sinh viên), hoặc là các khái niệm trừu tượng (ví dụ: tập tin, dữ liệu)
cần biểu diễn (sử dụng) trong phần mềm.
Các đối tượng có đặc điểm giống nhau được xếp vào một nhóm
hay một lớp (class). Ví dụ: lớp đối tượng SinhVien gồm các bạn đang học tại một
trường cao đẳng/đại học, đối tượng TapTin gồm các đoạn dữ liệu được lưu trên
đĩa.
Trong lập trình hướng đối tượng, người ta thường sử dụng từ
khóa class để định nghĩa các đặc điểm
và hành động chung của một lớp các đối tượng.
Một đối tượng sẽ là một đại diện cụ thể của một lớp đối tượng,
ví dụ sinh viên Nguyễn Văn Tèo là một đại diện của lớp SinhVien. Cũng có thể gọi
một đối tượng là một thể hiện (instance) của một lớp.
Công việc của lập trình viên là tạo ra các class trước, sau đó tạo ra các object từ các class đã có.
Tạo ra class là việc
liệt kê các thuộc tính (attribute hay property) cùng với các hành động (method
hay operation hay function) của một lớp đối tượng cụ thể.
Ví dụ:
class SinhVien { // định nghĩa lớp đối tượng
public $hoTen; // thuộc tính
public $diem; // thuộc tính
function chao() { // phương thức, hành động
echo 'Chao cac ban';
}
}
$sv = new SinhVien(); // tạo ra đối tượng sv thuộc lớp đối
tượng SinhVien
$sv->chao(); // gọi phương thức
//=> Chao cac ban
1.2
Hàm khởi tạo
Hầu hết các class
đều có một phương thức (hàm) đặc biệt là hàm khởi tạo (hay tạo lập,
constructor), hàm này không có kiểu trả về, có tên là __construct(), thực hiện khởi tạo các biến thành viên, được thực
thi tự động khi tạo ra đối tượng.
Ví dụ,
class SinhVien {
public $hoTen;
public $diem;
function __construct() {
echo "Hàm khởi tạo được gọi";
}
}
$sv = new SinhVien();
//=> Hàm khởi tạo được gọi
Ví dụ, truyền tham số cho hàm khởi tạo
class SinhVien {
public $hoTen;
public $diem;
function __construct($thamSo) {
echo "Tham so truyen cho ham khoi tao la: " . $thamSo;
}
}
$sv = new SinhVien('123');
//=> Tham so truyen cho ham khoi tao la: 123
1.3
Hàm hủy
Ngược lại với hàm khởi tạo là hàm hủy (phương thức hủy,
destructor). Hàm hủy thực hiện một số chức năng trước khi object bị hủy.
Hàm hủy có tên là __destruct(),
sẽ tự động chạy khi object bị hủy. Không thể truyền tham số cho hàm hủy.
Ví dụ một số thao tác trong hàm hủy: ghi dữ liệu vào cơ sở dữ
liệu, xuất thẻ đóng </body></html> của một tài liệu HTML.
Ví dụ hàm hủy:
class SinhVien {
public $hoTen;
public $diem;
function __construct() {
echo "<html><body>";
}
function __destruct(){
echo "</body></html>";
}
}
$sv = new SinhVien();
echo "Thong tin sinh vien";
//=> <html><body>Thong tin sinh vien</body></html>
Object bị hủy khi
nào?
Trong PHP, mỗi giá trị đều được lưu trong cấu trúc dữ liệu
tên là zval. Trong cấu trúc zval, ngoài trường cho biết kiểu dữ liệu,
giá trị của dữ liệu, còn có một trường (refcount) cho biết đang có bao nhiêu biến
tham chiếu tới giá trị đó (reference count). Trong trường hợp dữ liệu là object
thì refcount cho biết có bao nhiêu tham chiếu tới object.
Ví dụ:
class SinhVien {
public $hoTen;
public $diem;
function __construct() {
echo "Ham khoi tao <br>";
}
function __destruct(){
echo "<br>Ham huy";
}
}
$a = new SinhVien();
debug_zval_dump($a); // refcount(2): $a và debug_zval_dump tham chiếu tới
một thể hiện của SinhVien
$b = $a;
$c = $b;
debug_zval_dump($a); // refcount(4): $a, $b, $c, $debug_zval_dump
unset($a);
debug_zval_dump($b); // refcount(3): $b, $c, $debug_zval_dump
Refcount có giá trị bằng 0 trong ba trường hợp sau:
– Mỗi lần gọi hàm unset(object) sẽ làm giá trị của refcount
đi một giá trị
– Kết thúc hàm có chứa object
– Kết thúc chương trình
Ví dụ dưới đây minh họa trường hợp: sau hàm unset($a), hàm hủy
sẽ được gọi,
$a = new SinhVien();
unset($a);
echo "<br> sau ham huy";
</////
01 – OOP trong PHP
-----
Cập nhật: 19/4/2021
Đọc thêm: