Php có hỗ trợ đa kế thừa không?

Kế thừa là một nguyên tắc lập trình được thiết lập tốt và PHP sử dụng nguyên tắc này trong mô hình đối tượng của nó. Nguyên tắc này sẽ ảnh hưởng đến cách nhiều lớp và đối tượng liên quan với nhau

Ví dụ: khi mở rộng một lớp, lớp con sẽ kế thừa tất cả các phương thức, thuộc tính và hằng số công khai và được bảo vệ từ lớp cha. Trừ khi một lớp ghi đè các phương thức đó, chúng sẽ giữ nguyên chức năng ban đầu của chúng

Điều này hữu ích cho việc xác định và trừu tượng hóa chức năng, đồng thời cho phép triển khai chức năng bổ sung trong các đối tượng tương tự mà không cần phải triển khai lại tất cả các chức năng được chia sẻ

Các phương thức riêng của lớp cha không thể truy cập được đối với lớp con. Kết quả là, các lớp con có thể tự hiện thực lại một phương thức riêng tư mà không cần quan tâm đến các quy tắc kế thừa thông thường. Trước PHP 8. 0. 0, tuy nhiên, các hạn chế của finalstatic đã được áp dụng cho các phương pháp riêng tư. Kể từ PHP 8. 0. 0, hạn chế phương thức riêng tư duy nhất được thực thi là các hàm tạo private final, vì đó là cách phổ biến để "vô hiệu hóa" hàm tạo khi sử dụng các phương thức tĩnh của nhà máy thay thế

Khả năng hiển thị của các phương thức, thuộc tính và hằng số có thể được nới lỏng, e. g. một phương pháp protected có thể được đánh dấu là public, nhưng chúng không thể bị hạn chế, e. g. đánh dấu tài sản publicprivate

Ghi chú

Trừ khi autoloading được sử dụng, các lớp phải được xác định trước khi chúng được sử dụng. Nếu một lớp mở rộng một lớp khác, thì lớp cha phải được khai báo trước cấu trúc lớp con. Quy tắc này áp dụng cho các lớp kế thừa các lớp và giao diện khác

Ghi chú

Không được phép ghi đè thuộc tính đọc ghi bằng a hoặc ngược lại

class A {
public int $prop;
}
class B extends A {
// Illegal: read-write -> readonly
public readonly int $prop;
}
?>

Ví dụ #1 Ví dụ về kế thừa

________số 8_______

public function printPHP[]
{
echo 'PHP is great.' . PHP_EOL;
}
}

static0

static1

static2

Khả năng tương thích của loại trả về với các lớp nội bộ

Trước PHP 8. 1, hầu hết các lớp hoặc phương thức bên trong không khai báo kiểu trả về của chúng và mọi kiểu trả về đều được phép khi mở rộng chúng

Kể từ PHP 8. 1. 0, hầu hết các phương thức nội bộ bắt đầu "tạm thời" khai báo kiểu trả về của chúng, trong trường hợp đó, kiểu trả về của các phương thức phải tương thích với kiểu gốc được mở rộng; . Lưu ý rằng việc thiếu khai báo trả về rõ ràng cũng được coi là chữ ký không khớp và do đó dẫn đến thông báo không dùng nữa

Nếu kiểu trả về không thể được khai báo cho phương thức ghi đè do lo ngại về khả năng tương thích giữa các phiên bản PHP, thuộc tính ReturnTypeWillChange có thể được thêm vào để tắt thông báo không dùng nữ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]. Kế thừa là hiện tượng một lớp con có thể kế thừa tất cả các thuộc tính và đặc điểm của lớp cha.  

Bạn có thể hiểu điều này với một ví dụ thực tế đơn giản. Hãy xem xét tấm gương của con người. Bạn thừa hưởng các tính năng đặc trưng từ lớp 'Con người', chẳng hạn như đi bộ, ngồi, chạy, ăn, v.v. Lớp ‘Humans’ kế thừa từ lớp ‘Mammal’, những tính năng đặc trưng này – làm cho lớp ‘Human’ trở thành lớp dẫn xuất của ‘Mammal’. Hơn nữa, lớp 'Động vật có vú' có các tính năng đặc trưng của nó từ một lớp khác - 'Động vật'. Điều này làm cho lớp 'Động vật có vú' trở thành lớp dẫn xuất của lớp 'Động vật';

Kế thừa trong PHP

Kế thừa trong PHP là một khái niệm OOP quan trọng và không thể bỏ qua. Hiểu tính kế thừa trong PHP là cần thiết để có cái nhìn tổng thể về khái niệm hướng đối tượng trong PHP

Kế thừa cung cấp cho bạn rất nhiều lợi ích giúp cho việc lập trình PHP thuận tiện hơn rất nhiều. Một lợi ích như vậy là khả năng sử dụng lại mã. Khả năng sử dụng lại cho phép bạn tạo mã sạch và việc sao chép mã được giảm xuống gần như bằng không. Sử dụng lại các mã hiện có mang lại nhiều lợi ích khác nhau. Nó tiết kiệm thời gian, chi phí, công sức và tăng độ tin cậy của chương trình. Hơn nữa, chương trình trở nên trực quan

PHP cung cấp chủ yếu ba loại kế thừa dựa trên chức năng của chúng. Ba loại này như sau

  • Thừa kế đơn. Kế thừa đơn là kiểu kế thừa cơ bản hoặc cơ bản nhất được cung cấp bởi PHP. Chỉ có một lớp cơ sở và một lớp con/lớp dẫn xuất trong một kế thừa duy nhất và lớp con được kế thừa trực tiếp từ lớp cơ sở
  • Kế thừa phân cấp. Đúng như tên gọi, kế thừa phân cấp áp dụng cấu trúc dạng cây, trong đó nhiều lớp dẫn xuất được kế thừa từ lớp cơ sở
  • Kế thừa đa cấp. Kế thừa đa cấp là kiểu kế thừa thứ ba được hỗ trợ trong PHP. Nó xảy ra ở các mức độ khác nhau. Ở đây, một lớp cơ sở được lớp dẫn xuất kế thừa, sau đó lớp dẫn xuất đó được kế thừa bởi các lớp dẫn xuất khác, v.v.

Bài viết này sẽ thảo luận chi tiết về tất cả các loại này, sau

Thêm một ngôi sao khác vào đánh giá hiệu suất của bạn

Học MIỄN PHÍ từ các chuyên gia trong ngành Bắt đầu học

Cú pháp kế thừa một lớp trong PHP

Mô tả bên dưới là cú pháp được sử dụng để mở rộng một lớp cơ sở trong PHP

lớp dẫn xuất_class_name mở rộng cơ sở_class_name {

// định nghĩa các hàm thành viên của

// lớp dẫn xuất ở đây

}

Từ khóa extends được sử dụng để định nghĩa lớp dẫn xuất hoặc lớp con trong PHP

  • dẫn xuất_class_name. Nó chỉ định tên của lớp dẫn xuất hoặc lớp con. Lớp con hay còn gọi là lớp con, kế thừa những đặc điểm, tính chất nổi bật của lớp cha. Có thể có một hoặc nhiều lớp dẫn xuất kế thừa từ cùng một lớp cơ sở tùy thuộc vào kiểu kế thừa được thực hiện. Có ba chế độ hiển thị được hỗ trợ trong PHP. Công khai, Riêng tư và Được bảo vệ, xác định cách lớp dẫn xuất sẽ kế thừa những gì

  • base_class_name. Nó chỉ định tên của lớp cơ sở hoặc lớp cha mà từ đó lớp con kế thừa các thuộc tính của nó. Lớp cơ sở còn được gọi là lớp cha vì tất cả các lớp được gọi là lớp dẫn xuất hoặc lớp con đều kế thừa các thuộc tính của chúng từ lớp cơ sở. Có thể có một hoặc nhiều lớp cơ sở trong một chương trình, tùy thuộc vào kiểu kế thừa. Chẳng hạn, trong kế thừa một cấp, sẽ có một lớp cơ sở cho một lớp con, nhưng trong kế thừa đa cấp, một lớp con có thể kế thừa từ hơn một lớp cơ sở ở nhiều cấp

Công cụ sửa đổi truy cập trong PHP

Công cụ sửa đổi truy cập [riêng tư, công khai hoặc được bảo vệ] được sử dụng trong định nghĩa của các hàm thành viên và thành viên dữ liệu của lớp dẫn xuất chỉ định chế độ mà các tính năng của lớp cơ sở được dẫn xuất. Công cụ sửa đổi truy cập kiểm soát vị trí và cách thức các thành viên dữ liệu và hàm thành viên của lớp cơ sở có thể được kế thừa bởi các lớp con. Các công cụ sửa đổi truy cập này được sử dụng để hạn chế quyền truy cập của lớp cơ sở từ lớp con để đóng gói dữ liệu. Điều này thường được gọi là ẩn dữ liệu.   

Trong PHP, có ba công cụ sửa đổi truy cập.  

  • Công cộng

Công cụ sửa đổi truy cập công khai cung cấp ít quyền riêng tư nhất cho các thuộc tính của lớp cơ sở. Nếu công cụ sửa đổi truy cập là công khai, điều đó có nghĩa là lớp dẫn xuất có thể truy cập các thành viên công khai và được bảo vệ của lớp cơ sở chứ không phải các thành viên riêng tư của lớp cơ sở.  

Ví dụ sau đây cho thấy một lớp với các thành viên public

lớp dẫn xuất_class_name mở rộng cơ sở_class_name

{

// thành viên dữ liệu công cộng

$var_name công khai;

// hàm thành viên public

chức năng công khai function_name[]

{

// định nghĩa hàm ở đây

}

}

Chương trình sau minh họa công cụ sửa đổi truy cập công khai trong PHP

  • Riêng tư

Công cụ sửa đổi truy cập riêng cung cấp quyền riêng tư tối đa cho các thuộc tính của lớp cơ sở. Bạn chỉ có thể truy cập thành viên dữ liệu hoặc hàm thành viên được khai báo riêng trong lớp mà chúng được khai báo

Ví dụ sau minh họa một lớp với các thành viên private.  

lớp dẫn xuất_class_name mở rộng cơ sở_class_name

{

// thành viên dữ liệu riêng tư

$var_name riêng tư;

// hàm thành viên riêng

chức năng riêng function_name[]

{

// định nghĩa hàm ở đây

}

}

Mặc dù khả năng truy cập trực tiếp của một thành viên riêng tư là không thể, nhưng bạn có thể truy cập chúng một cách gián tiếp bằng cách sử dụng các hàm thành viên công khai trong lớp. Nếu các thành viên riêng được truy cập bởi một thành viên chung trong một lớp, thì bất kỳ lớp con nào truy cập chức năng chung này cũng có thể truy cập thành viên riêng đó

Chương trình sau minh họa công cụ sửa đổi quyền truy cập riêng tư trong PHP

 

Trong chương trình này, bạn đang cố gắng truy cập trực tiếp vào một thành viên riêng trong lớp dẫn xuất. Đó là lý do tại sao nó gây ra lỗi

  • được bảo vệ

Công cụ sửa đổi quyền truy cập được bảo vệ cung cấp mức độ riêng tư trung gian cho các thành viên của một lớp. Nếu bộ chỉ định truy cập được bảo vệ, điều này có nghĩa là lớp dẫn xuất có thể truy cập các thành viên công khai và được bảo vệ của lớp cơ sở. Các thành viên được bảo vệ của một lớp cơ sở có thể được truy cập trong lớp đó và bởi các lớp con của nó

Ví dụ sau minh họa một lớp với các thành viên được bảo vệ.  

lớp dẫn xuất_class_name mở rộng cơ sở_class_name

{

// thành viên dữ liệu được bảo vệ

$var_name được bảo vệ;

// hàm thành viên được bảo vệ

chức năng được bảo vệ function_name[]

{

// định nghĩa hàm ở đây

}

}

Chương trình sau minh họa công cụ sửa đổi quyền truy cập được bảo vệ trong PHP

 

Lớp con với các phương thức và thuộc tính riêng

Trong kế thừa, mục đích của việc kế thừa các thuộc tính và thành viên của lớp cơ sở bởi một lớp con là hoàn thành tốt. Khi một lớp con kế thừa từ một lớp cơ sở, nó có quyền truy cập trực tiếp vào tất cả các thành viên không riêng tư của lớp cơ sở. Và thậm chí các thành viên riêng tư có thể được truy cập gián tiếp.  

Tuy nhiên, một lớp con cũng có thể có các phương thức và thuộc tính riêng. Ngoài các thành viên của lớp cơ sở, một lớp dẫn xuất có thể có bao nhiêu thành viên dữ liệu và phương thức tùy thích. Một lớp dẫn xuất cũng giống như bất kỳ lớp nào khác, với lợi ích là có quyền truy cập vào một số phương thức và thuộc tính khác của lớp cơ sở. Đây là những gì kế thừa là tất cả về.   

Chương trình sau minh họa một lớp con có quyền truy cập vào các thuộc tính của lớp cơ sở cùng với các phương thức và thuộc tính của nó

Chủ Đề