[OOP]: Giới thiệu về sự kế thừa và tầm vực của phương thức và thuộc tính

Ở bài trước, chúng ta đã đề cập tới các phương thức magic trong . Bởi việc sử dụng các phương thức này. Mã nguồn của chúng ta sẽ trở nên linh động và giảm bớt các thao tác không cần thiết khi vận hành. Trong bài này, chúng tôi tiếp tục giới thiệu tới các bạn yếu tố kế thừa, tầm vực của phương thức và thuộc tính trong hướng đối tượng.
Sự kế thừa trong hướng đối tượng

Một Class có thể kế thừa các phương thức và thuộc tính của class khác, bằng cách sử dụng từ khóa extends. Ví dụ, để tạo ra một class kế thừa MyClass đồng thời thêm vào nó một phương thức, bạn sẽ có mã lệnh như sau:

Mở trình duyệt, và xem kết quả xuất ra như sau:

The class “MyClass” was initiated!
From a new method in MyOtherClass.
I’m a class property!
The class “MyClass” was destroyed.
Kỹ thuật nạp chồng trong Hướng Đối Tượng

Tại một class con, để thay đổi giá trị, tính năng của một thuộc tính hoặc phương thức đã có sẵn ở class cha, bạn chỉ cần ghi đè (nạp chồng) lên nó bằng cách khởi tạo lại chính nó trong class con:

Kết quả dữ liệu xuất ra trên trình sẽ thay đổi như sau:

A new constructor in MyOtherClass.
From a new method in MyOtherClass.
I’m a class property!
The class “MyClass” was destroyed.
Kỹ thuật bảo vệ phương thức trong phương pháp nạp chồng
Để thêm một chức năng mới trong một phương thức kế thừa mà vẫn giữ được nguyên gốc chức năng ban đầu của nó, bạn sử dụng từ khóa parent cùng với toán tử phân giải phạm vi (scope resolution operator)(::):

Kết quả sẽ xuất ra giá trị của cả phương thức constructor của class cha lẫn giá trị phương thức constructor của class con:

The class “MyClass” was initiated!
A new constructor in MyOtherClass.
From a new method in MyOtherClass.
I’m a class property!
The class “MyClass” was destroyed.
Gán tầm vực cho Thuộc Tính và Phương Thức

Để gia tăng khả năng kiểm soát các object, các phương thức và thuộc tính sẽ được gán thêm những giá trị tầm vực. Nó cho phép chúng ta kiểm soát khả năng truy cập (như thế nào và ở nơi đâu) của thuộc tính và phương thức. Chúng ta có ba từ khóa để đảm nhiệm việc này:public,protected, vàprivate. Ngoài ra, còn có một từ khóa nữa cũng có khả năng đảm nhiệm việc này, đó là static, nó cho phép các thuộc tính và phương thức có thể được truy cập mà không cần khởi tạo class.

Chú ý: tầm vực của thuộc tính và phương thức là 2 tính năng mới của 5.

Thuộc Tính và Phương Thức Mang Tầm Vực Public

Với nhóm này, toàn bộ các phương thức và thuộc tính bạn sử dụng đều mang tính công cộng. Tức là chúng có thể được truy cập từ bất cứ nơi đâu, cà trong và ngoài class.

Khi bạn khai báo một thuộc tính hay phương thức mà không gán tầm vực cho chúng, thì PHP tự hiểu nó thuộc nhóm public.

Thuộc Tính và Phương Thức Mang Tầm Vực Protected

Khi một thuộc tính hay phương thức được khai báo tầm vựcprotected, chúng chỉ có thể truy cập được trong chính class chứa chúng, hoặc tại một class kế thừa class này.

Gán tầm vực protected cho phương thức getProperty() trong MyClass và thử truy cập nó từ bên ngoài class:

Chạy script, và bạn sẽ nhận được thông báo lỗi như sau:

The class “MyClass” was initiated!
A new constructor in MyOtherClass.
 

Fatal error: Call to protected method MyClass::getProperty() from context ” in /Applications/XAMPP/xamppfiles/htdocs/testing/test.php on line 55

Nào, bây giờ chúng ta thử tạo một phương thức mới trong MyOtherClass để gọi phương thức getProperty():

Và kết quả sẽ đúng như bạn mong muốn:

The class “MyClass” was initiated!
A new constructor in MyOtherClass.
I’m a class property!
The class “MyClass” was destroyed.
Thuộc Tính và Phương Thức Mang Tầm Vực Private

Một thuộc tính hay phương thức được gán private thì chỉ có thể truy cập được bên trong class đã định nghĩa nó. Điều này có nghĩa là ngay cả khi có 1 class kế thừa class đã định nghĩa một thuộc tính private, thuộc tính hay phương thức này cũng sẽ không tồn tại trong toàn bộ class con.

Để chứng minh điều này, chúng ta sẽ khai báo phương thức getProperty() là private trong MyClass, và cố gắng truy cập nó thông qua một phương thức public callProtected()từ MyOtherClass(class kế thừa MyClass):

Reload lại trình duyệt để xem thông báo lỗi như sau xuất hiện:

The class “MyClass” was initiated!
A new constructor in MyOtherClass.
 

Fatal error: Call to private method MyClass::getProperty() from context ‘MyOtherClass’ in /Applications/XAMPP/xamppfiles/htdocs/testing/test.php on line 49

Thuộc Tính và Phương Thức Static

Một phương thức hay thuộc tính được gán tầm vực static có thể truy cập được ngay cả khi bạn không khởi tạo class, bạn chỉ cần cung cấp tên class, toán tử phân giải phạm vi (::), và tên thuộc tính hoặc phương thức.

“Một trong những lợi ích chính khi sử dụng thuộc tính static là chúng giữ các giá trị được lưu trữ trong suốt khoảng thời gian script tồn tại.”

Để chứng minh điều này, chúng ta sẽ thêm vào MyClass một thuộc tính static được gọi là $count và một phương thức static được gọi là plusOne(). Sau đó xây dựng một vòng lặp do…while để xuất ra các giá trị tăng dần mà nhỏ hơn 10 của $count:

Chú ý: Khi truy cập các thuộc tính static,ký tự độ la ($) sẽ nằm sau toán tử phân giải phạm vi (::).

Khi bạn load script này trên trình duyệt, nó sẽ xuất ra kết quả như sau:

The count is 1.
The count is 2.
The count is 3.
The count is 4.
The count is 5.
The count is 6.
The count is 7.
The count is 8.
The count is 9.
The count is 10.

(Vũ Anh Tuấn)

Cùng Nội Dung:

Liên Quan Khác

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">