Yêu cầu thg 2 16, 2020 3:43 SA 1896 1 3
  • 1896 1 3
+1

Có đa kế thừa trong OOP PHP hoặc là các ngôn ngữ hổ trợ OOP khác?

Chia sẻ
  • 1896 1 3

Các bác cho e hỏi trong OOP trong PHP (hoặc các ngôn ngữ khác) có đa kế thừa không ạ. E thấy câu này hay hỏi phỏng vấn, các bác cho e xin câu tl 😃)

3 CÂU TRẢ LỜI


Đã trả lời thg 2 16, 2020 3:56 SA
Đã được chấp nhận
+13

Đa kế thừa bạn có thể hiểu đơn giản là một class có thể kế thừa từ nhiều hơn 1 class khác. Hiểu theo nghĩa này thì PHP, hay Java đều không hỗ trợ đa kế thừa (do khi khai báo class, bạn chỉ có thể extends từ duy nhất 1 class khác). Ngôn ngữ OOP hỗ trợ đa kế thừa phổ biến nhất, thì có lẽ là C++ và Python.

Mặc dù không hỗ trợ việc kế thừa từ nhiều class cùng một lúc, nhưng PHP (hay Java) đi theo một cách khác để hỗ trợ một vài tính chất của đa kế thừa, thông qua Interface (một class có thể implements nhiều hơn 1 Interface). Ngoài ra PHP còn có khái niệm Trait, cũng có thể sử dụng để thể hiện một vài tính chất của đa kế thừa. Nhưng về cơ bản, thì nó vẫn khác với khái niệm đa kế thừa được thể hiện trên C++ hay Python 😄

Chia sẻ
Avatar duongricky @duongricky
thg 2 16, 2020 4:02 SA

Tks bác nhiều, e vừa upvote cho bác ạ

Avatar Tran Duc Thang @thangtd90
thg 2 16, 2020 5:09 SA

@duongricky Cám ơn bạn 😄

Đã trả lời thg 2 17, 2020 6:47 SA
+4

Thực ra bản chất của OOP không mô tả hay quy định việc có được đa kế thừa hay không. Còn việc các ngôn ngữ có đa kế thừa hoặc không có là do chủ đích của người thiết kế ngôn ngữ. Ví dụ nếu cho phép đa kế thừa, rất nhiều ông lập trình viên sẽ kế thừa theo kiểu: Son extends Father, Mother. Cả Father và Mother đều có method là reproduction() nhưng Father sẽ có hành vi khác với Mother. Điều này sẽ sinh ra lúng túng. Thành ra các ông ấy hạn chế luôn bằng cách không cho phép đa kế thừa trên class và chuyển đa kế thừa sang Interface, tức chỉ kế thừa về mặt giao diện hành vi, còn thằng con thích thể hiện hành vi của nó như thế nào thì nó tự quyết định. Ví dụ thay vì nó sinh sản bằng cách thụ tinh, thì có có thể cắt phéng đi, rồi lắp tử cung nhân tạo để đẻ như phụ nữ. Trong thiết kế hướng đối tượng, người ta cũng khuyên là không nên dùng kế thừa mà dùng kết hợp (composition) trong những trường hợp phức tạp. Ví dụ như 100 Class con cùng loại nhưng cùng 1 hành vi (method) lại có kết quả khác nhau. Nếu dùng Interface, nó có thể dẫn đến việc duplicate code, vì bạn phải viết lại cùng 1 hành vi quá nhiều lần.

Chia sẻ
Avatar duongricky @duongricky
thg 2 18, 2020 2:28 SA

upvote cho bác nhé mà sao avatar bác kỳ quặc thế 😄

Avatar bienhoang @bienhoang
thg 2 18, 2020 3:48 SA

@duongricky À, chụp bằng app của Facebook ấy.

Đã trả lời thg 2 17, 2020 12:21 SA
+2

PHP không có đa kế thừa nha bạn. Nhưng bạn có thể sử dụng Trait, nó sẽ hỗ trợ 1 vài thứ giống như đa kế thừa

Chia sẻ
Avatar duongricky @duongricky
thg 2 18, 2020 2:28 SA

upvote cho bác nhé 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí