Hướng đối tượng trong PHP
Từ PHP 5, ngôn ngữ này đã giới thiệu đầy đủ các tính năng của lập trình hướng đối tượng. Một số tính năng bao gồm:
abtract class
,interface
- phương thức và lớp
final
- phương thức
public
,private
,protected
- phương thức
magic
,cloning
Giới thiệu class (lớp)
Class được định nghĩa gồm từ khóa class
theo sau đó là tên class, cùng với cặp ngoặc nhọn. Bên trong class chứa nội dung bao gồm hằng số, biến (hay còn gọi là thuộc tính) và hàm (hay còn gọi là phương thức).
Biến $this
biểu thị cho object hiện tại của class đó.
|
|
PHP đối xử với object như tham chiếu chứ không phải tạo một đối tượng mới. Mỗi khi tạo đối tượng mới thì chúng ta phải dùng từ khóa new
.
Ví dụ dưới đây thay đổi giá trị của biến mà không cần dùng biến tham chiếu &
trong hàm changeValue
. Vì mặc định biến $object
đã là một tham chiếu. Tính chất này cũng đúng trong các ngôn ngữ bậc cao khác như Javascript.
|
|
Từ khóa new
Để tạo một đối tượng từ class, hãy sử dụng từ khóa new
. Từ khóa new
sẽ gọi contructor của class. Nếu không có tham số của contructor
(hàm tạo) thì có thể bỏ qua dấu ()
.
Để truy cập phương thức sử dụng $tên_object->phương_thức
(không có dấu $
trước phương thức). Tương tự cũng không sử dụng $
với tên hàm.
Hàm __destruct
sẽ được gọi nếu đối tượng không có biến nào tham chiếu tới nữa hoặc chương trình kết thúc giống như ngôn ngữ C++.
|
|
Cũng có thể tạo đối tượng dựa trên string chứa tên class.
|
|
Giống như tạo hàm không tên chúng ta còn có thể tạo class không tên từ phiên bản PHP 7.
|
|
Class thừa kế class với từ khóa extends
Thừa kế trong PHP là đơn thừa kế, có nghĩa là một lớp chỉ được thừa kế duy nhất một lớp khác. Class thừa kế có thể ghi đè phương thức và thuộc tính của class cha. Khi class cha định nghĩa lớp hoặc phương thức với từ khóa final
tức là nó không được ghi đè nữa. Class con muốn truy cập class cha thì sử dụng từ khóa parent::
.
Phương thức mà không định nghĩa từ khóa public
, private
hay protected
có nghĩa đó là phương thức public
.
|
|
::class
Từ phiên bản PHP 5.5 có thể lấy tên class đầy đủ bằng sử dụng ::class
. Tên class đầy đủ là tên chứa cả namespace.
|
|