Bài 07: Nạp Chồng – Ghi Đè OPP PHP

PHP nâng cao 21/01/2017 10:29 1589
Trong thực tế bạn thấy rằng có rất nhiều loại đối tượng khác nhau nhưng lại có những hành động giống nhau theo cách nhìn khách quan từ bên ngoài. Nhưng khi chúng ta nhìn một cách chi tiết thì nó sẽ có những chi tiết khác nhau.

Hôm này chúng ta cùng tìm hiểu về cơ chế Nạp chồng và Ghi đè(nó thuộc về mộ trong 3 tính chất quan trọng của OPP) trong lập trình hướng đối tượng PHP. Để bạn hiểu tóm tắt nhất thì tôi có thể tổng kết như sau.

  • Nạp chồng: Là việc chúng ra khai báo nhiều phương thức trùng tên nhưng khác nhau về tham số.
  • Ghi đè: Là việc ta khai báo các phương thức của lớp con trùng tên với các phương thức ở lớp cha.

1. Nạp Chồng(Overloading)

Việc khai báo trong một lớp có nhiều phương thức cùng tên nhưng khác tham số (khác kiểu dữ liệu, khác số lượng tham số) gọi là khai báo chồng phương thức (overloading method). Hay ngắn ngọn theo từng ý như phía dưới để các bạn dễ hiểu hơn.

  • Các phương thức nằm trong cùng 1 lớp , có cùng tên với nhau nhưng có danh sách đối số khác nhau được gọi là các phương thức nạp chồng.
  • Hàm tạo cũng có thể được nạp chồng.
  • Tùy theo ta gọi đối số thế nào mà nó sẽ gọi hàm tương ứng.
  • Nạp chồng là hình thức đa hình (polymorphism) trong quá trình biên dịch (compile time).

Ví dụ:

 

class Animal{
    function an(){
        echo 'Động vật đang ăn';
    }
    function an($con=NULL){
        echo 'Con '.$con.' dang ăn';
    }
}
 // Kahi báo một đối tượng
$a = new Animal();
$a->an();//Kết quả: Con trâu đang ăn
$a->an("Chó");//Kết quả: Con chó đăng ăn

2. Ghi đè(Override)

Trong PHP, nếu như người lập trình tạo ra một phương thức trong lớp con có trùng tên với một phương thức đã được tạo ở lớp cha thì đó được gọi là ghi đè phương thức(Method Overriding). Hoặc một cách dễ hiểu hơn như sau.

  • Là Phương thức đã xuất hiện ở lớp cha và xuất hiện tiếp ở lớp con.
  • Khi đối tượng thuộc lớp con gọi phương thức thì sẽ chọn lựa và chạy theo phương thức trong lớp con.
  • Nếu lớp con không có phương thức đó thì mới lên kiếm ở lớp cha để chạy
  • Ghi đè là hình thức đa hình (polymorphism) trong quá trình thực thi (Runtime)

Ví dụ:

 

class Animal{
    public function an(){
        echo 'Animal dang ăn';
    }
}
class Dog extends testParent{
    function an(){
        //Overriding function an{
        echo 'Dog đang ăn';
    }
}
 // Kahi báo một đối tượng
$a = new Dog();
$a->an();//Kết quả: Dog đang ăn

 

Lưu ý với các bạn khi viết lại hàm thì các biến truyền vào hàm ở lớp cha và lớp con phải khớp nhau, nghĩa là hàm ở lớp cha truyền vào bao nhiêu tham số thì hàm ở lớp con truyền vào bấy nhiêu tham số.

Như vậy ở bài này mình đã giới thiệu đến các bạn hai khái niệm cơ bản và rất quan trọng trong lập trình hướng đối tượng nói chung và trong PHP nói riêng. Chúc các bạn thành công!

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.