Tại sao đa kế thừa không được hỗ trợ trong php?

À, đây là một câu hỏi rất cổ điển như Tại sao Chuỗi không thay đổi được trong Java; . Mặc dù hai lý do sau đây có ý nghĩa với tôi về Tại sao Java không hỗ trợ nhiều kế thừa.


Tại sao Java không hỗ trợ đa kế thừa

1] Lý do đầu tiên là sự mơ hồ xung quanh vấn đề Kim cương, hãy xem xét một phương thức lớp A có foo[] và sau đó B và C bắt nguồn từ . foo[] compiler will not be able to decide which foo[] it should invoke. 

Đây còn được gọi là bài toán Kim cương vì cấu trúc trong tình huống thừa kế này tương tự như viên kim cương 4 cạnh, xem bên dưới

           A foo[]
           / \
          /   \
   foo[] B     C foo[]
          \   /
           \ /
            D
           foo[]

In my opinion, even if we remove the top head of diamond class A and allow multiple inheritances we will see this problem of ambiguity.



Đôi khi nếu bạn đưa lý do này cho người phỏng vấn, anh ta sẽ hỏi liệu C++ có thể hỗ trợ đa kế thừa không thì tại sao Java lại không. hmmmmm trong trường hợp đó, tôi sẽ cố gắng giải thích cho anh ấy lý do thứ hai mà tôi đã đưa ra bên dưới rằng đó không phải là do khó khăn về kỹ thuật mà do thiết kế rõ ràng và dễ bảo trì hơn mới là yếu tố thúc đẩy mặc dù điều này chỉ có thể được xác nhận bởi bất kỳ nhà thiết kế java nào và chúng tôi chỉ có thể . Liên kết Wikipedia có một số giải thích tốt về cách phát sinh vấn đề địa chỉ ngôn ngữ khác nhau do sự cố kim cương trong khi sử dụng nhiều kế thừa.


2. Lý do thứ hai và thuyết phục hơn đối với tôi là nhiều kế thừa làm phức tạp thiết kế và tạo ra sự cố trong quá trình truyền, xâu chuỗi hàm tạo, v.v. và do không có nhiều tình huống mà bạn cần nhiều kế thừa nên quyết định khôn ngoan của nó là bỏ qua nó vì mục đích đơn giản.

Ngoài ra, java tránh sự mơ hồ này bằng cách hỗ trợ kế thừa đơn lẻ với các giao diện. Vì giao diện chỉ có khai báo phương thức và không cung cấp bất kỳ triển khai nào nên sẽ chỉ có một triển khai của một phương thức cụ thể do đó sẽ không có bất kỳ sự mơ hồ nào.

Đa kế thừa là một trong bốn trụ cột của lập trình hướng đối tượng OOP, bao gồm một lớp con hoặc lớp con kế thừa các đặc điểm từ nhiều lớp cha hoặc lớp cha

Các lớp này có thể sử dụng lại mã bắt nguồn từ lớp cha của chúng sau khi kích hoạt mối quan hệ giữa lớp con và lớp cha bằng cách sử dụng logic cơ bản của phân cấp. Sử dụng nhiều kế thừa làm tăng tốc độ biên dịch, giảm thời gian phát triển và cung cấp mức độ chính xác cao hơn

Lập trình hướng đối tượng

  1. Lập trình hướng đối tượng, còn được gọi là OOP, là một phương pháp lập trình có cấu trúc được sử dụng để tổ chức các khối mã xung quanh dữ liệu và đối tượng thay vì các chức năng và logic
  2. Các đối tượng. Đối tượng là các trường dữ liệu có đặc điểm và tập hợp chức năng cụ thể
  3. Lập trình hướng đối tượng chủ yếu tập trung vào các đối tượng dữ liệu do nhà phát triển tạo ra mà họ muốn thao tác để thực hiện một tác vụ nào đó hơn là tập trung vào logic cần thiết để thao tác với đối tượng
  4. Kiểu lập trình này có hiệu quả cao đối với các chương trình có độ phức tạp dữ liệu rất cao, phải cập nhật thường xuyên hoặc bảo trì kỹ lưỡng.
  5. Một số ưu điểm khác của lập trình hướng đối tượng bao gồm khả năng sử dụng lại mã, khả năng mở rộng và hiệu quả
  6. Nguyên tắc chính của OOP bao gồm
    • Đóng gói dữ liệu
    • Trừu tượng dữ liệu
    • Di sản
    • đa hình

PHP không có thuộc tính đa kế thừa, nhưng chúng ta vẫn có thể sử dụng đa kế thừa trong PHP với sự trợ giúp của việc sử dụng các giao diện được cung cấp trong PHP hoặc các đặc điểm và lớp

Các đặc điểm và giao diện là các đặc điểm đặc biệt của các ngôn ngữ lập trình kế thừa đơn lẻ như PHP, trong đó nhiều kế thừa là không thể. Một đặc điểm giúp nhà phát triển giảm bớt các hạn chế của thuộc tính kế thừa duy nhất của PHP và giúp sử dụng lại mã một cách tự do trong các lớp khác nhau thể hiện các cấp độ khác nhau trong hệ thống phân cấp. Các đặc điểm gần giống với một lớp, nhưng chúng luôn nhóm chức năng, không giống như các lớp. Không thể tự khởi xướng một đặc điểm, đó là lý do tại sao cần sử dụng nó trong lớp. Có thể nói trait là một loại class giúp lập trình viên có nhiều kế thừa bằng cách sử dụng đồng thời nhiều trait.

Đặc điểm [Sử dụng Lớp cùng với Đặc điểm]

cú pháp

Ví dụ

đầu ra

Trong chương trình trên, chúng ta đã phát âm hai điểm tương tác, thứ nhất với tên first interface with work interface one[] và thứ hai với tên second interface with work outsidefacetwo[]. Cuối cùng, chúng ta có một lớp con có tên là lớp con với hàm con công việc [] và có được cả hai điểm tương tác bằng cách sử dụng cung cấp thực hiện. Chúng tôi đã đưa ra ý nghĩa của các dung lượng được phát âm trong các giao diện bên trong dung lượng. Ngoài ra, để truy cập các lớp và điểm kết nối, chúng tôi đã tạo một mục có tên obj và gọi từng khả năng bằng cách sử dụng một bài viết tương tự. Chúng tôi vừa công bố năng lực điểm kết nối và sẽ mô tả năng lực tương tự ở lớp trẻ

Tại sao đa thừa kế không được hỗ trợ?

Lý do đằng sau điều này là để tránh sự mơ hồ . Hãy xem xét trường hợp lớp B mở rộng lớp A và lớp C và cả lớp A và C đều có cùng một phương thức display[]. Bây giờ trình biên dịch java không thể quyết định nên kế thừa phương thức hiển thị nào. Để ngăn chặn tình trạng như vậy, nhiều kế thừa không được phép trong java.

Đa kế thừa trong PHP là gì?

Đa kế thừa trong PHP Đa kế thừa là tài nguyên của Ngôn ngữ lập trình hướng đối tượng trong đó lớp con hoặc lớp con có thể kế thừa tài nguyên của nhiều lớp cha hoặc lớp cha. PHP không hỗ trợ Đa kế thừa nhưng sử dụng các giao diện trong PHP, chúng ta có thể triển khai nó

Những hạn chế của đa thừa kế là gì?

Nhược điểm của đa kế thừa là có thể dẫn đến nhiều nhầm lẫn khi hai lớp cơ sở triển khai một phương thức có cùng tên .

Tại sao PHP hỗ trợ kế thừa đơn?

Nó hỗ trợ khái niệm phân loại theo thứ bậc. Kế thừa có ba loại, Kế thừa đơn, nhiều và đa cấp. PHP chỉ hỗ trợ kế thừa đơn, trong đó chỉ một lớp có thể được dẫn xuất từ ​​lớp cha đơn . Chúng ta có thể mô phỏng đa kế thừa bằng cách sử dụng các giao diện.

Chủ Đề