Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

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

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

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à chức năng 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

// Định nghĩa lớp cơ sở

trang sức đẳng cấp {

public $price = "Chúng tôi có giá cố định là 100000";

hàm printMessage() {

tiếng vang $this->price;

tiếng vang PHP_EOL;

}

}

//  định nghĩa các lớp dẫn xuất

lớp Vòng cổ mở rộng Trang sức {

chức năng in(){

tiếng vang $this->price;

tiếng vang PHP_EOL;

}

}

//tạo đối tượng của

// Lớp có nguồn gốc

$obj= Vòng cổ mới;

// gọi các hàm

tiếng vang $obj->giá;

tiếng vang PHP_EOL;

$obj->printMessage();

$obj->print();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó 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

// Định nghĩa lớp cơ sở

trang sức đẳng cấp {

private $price = "Chúng tôi có giá cố định là 100000";

chương trình chức năng riêng tư ()

{

echo "Đây là phương thức private của lớp cơ sở";

}

}

//  định nghĩa các lớp dẫn xuất

lớp Vòng cổ mở rộng Trang sức {

hàm printPrice()

{

tiếng vang $this->price;

}

}

//tạo đối tượng của

// Lớp có nguồn gốc

$obj= Vòng cổ mới;

// dòng này đang cố gắng

// gọi một phương thức riêng tư

// điều này sẽ gây ra lỗi

$obj->show();

// điều này cũng sẽ gây ra lỗi

$obj->printPrice();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó 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

// Định nghĩa lớp cơ sở

trang sức đẳng cấp {

được bảo vệ $price1 = 10000;

$price2 = 20000 được bảo vệ;

// Hàm trừ

hàm tổng()

{

echo $sum = $this->price1 + $this->price2;

tiếng vang PHP_EOL;

}

}

 

// định nghĩa các lớp dẫn xuất

lớp Vòng cổ mở rộng Trang sức {

hàm printInvoice()

{

$thuế = 100;

echo $sub = $this->price1 + $this->price2 + $tax;

tiếng vang PHP_EOL;

}

}

$obj= Vòng cổ mới;

$obj->total();

$obj->printInvoice();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó 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ó

// Định nghĩa lớp cơ sở

lớp cơ sở_lớp {

// thành phần dữ liệu của lớp cơ sở

công khai $data_mem = 10;

// hàm thành viên của lớp cơ sở

hàm công khai member_func()

{

echo "Tôi là hàm lớp cơ sở. “;

echo "Tôi là thành viên dữ liệu của lớp cơ sở. “;

tiếng vang $this->data_mem;

}

}

//  định nghĩa các lớp dẫn xuất

lớp con_lớp kéo dài lớp cơ sở {

// hàm thành viên của lớp con

hàm con_func()

{   echo "Tôi là hàm lớp con. “;

tiếng vang $this->data_mem;

}

}

//tạo đối tượng của

// Lớp có nguồn gốc

$obj= lớp con mới;

//gọi phương thức của lớp cơ sở

$obj->member_func();

//gọi phương thức của lớp con

$obj->child_func();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?
 

Các loại kế thừa trong PHP

Ba loại kế thừa sau đây được hỗ trợ trong PHP

  • Thừa kế đơn

Kế thừa đơn là kiểu thừa kế cơ bản và đơn giản nhất. Như tên gợi ý, trong một kế thừa duy nhất, chỉ có một lớp cơ sở và một lớp con hoặc lớp dẫn xuất. Nó kế thừa trực tiếp lớp con từ lớp cơ sở

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Chương trình sau minh họa kế thừa một mức trong PHP

// lớp cơ sở tên là "Trang sức"

trang sức đẳng cấp {

var $chi phí = 10000;

hàm công khai printName($name) {

echo 'Đây là lớp cơ sở. Đồ trang sức & tên của đồ trang sức là. '. tên $. PHP_EOL;

}

}

// lớp dẫn xuất có tên "Vòng cổ"

lớp Vòng cổ mở rộng Trang sức {

hàm công khai printName($name) {

echo 'Đây là lớp con. Vòng cổ & tên của đồ trang sức là. '. tên $. PHP_EOL;

// lớp này có thể truy cập

// thành viên dữ liệu của lớp cha

tiếng vang 'Giá là. '. $this->chi phí. PHP_EOL;

}

}

$f = Đồ trang sức mới();

$s = Vòng cổ mới();

$f->printName('Ring');

$s->printName('Vòng cổ');

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

  • Kế thừa đa cấp

Kế thừa đa cấp là một loại kế thừa khác được tìm thấy trong PHP. Kế thừa đa cấp cũng có thể được giải thích bằng cây phả hệ. Có một lớp cơ sở. Lớp cơ sở này có thể được kế thừa bởi. Các lớp con này (không nhất thiết phải là mọi lớp con) hoạt động như lớp cơ sở và được kế thừa bởi các lớp con khác. Điều này cũng giống như một gia đình có con cháu qua nhiều thế hệ.  

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Chương trình sau minh họa kế thừa đa cấp trong PHP

// lớp cơ sở tên là "Trang sức"

trang sức đẳng cấp {

hàm công cộng totalCost() {

trả lại  ' tổng chi phí đồ trang sức. 600000';

}

}

// lớp dẫn xuất có tên "Vòng cổ"

// lớp biểu mẫu kế thừa "Trang sức"

lớp Vòng cổ mở rộng Trang sức {

chức năng công cộng vòng cổ() {

trả lại  ' chi phí vòng cổ. 450000';

}

}

// lớp dẫn xuất có tên "Pendant"

// lớp biểu mẫu kế thừa "Vòng cổ"

lớp Mặt dây chuyền mở rộng Vòng cổ {

chức năng công khai mặt dây chuyềnCost() {

trả lại  ' chi phí mặt dây chuyền. 600000';

}

hàm công khai priceList() {

tiếng vang '1. '. $this->totalCost(). PHP_EOL;

tiếng vang '2. '. $this->vòng cổ(). PHP_EOL;

tiếng vang '3. '. $this->pendantCost(). PHP_EOL;

}

}

// tạo đối tượng của

// lớp dẫn xuất

$obj = Mặt dây chuyền mới();

$obj->priceList();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

  • Kế thừa phân cấp

Đúng như tên gọi, thừa kế phân cấp thể hiện cấu trúc dạng cây. Nhiều lớp dẫn xuất được kế thừa trực tiếp từ lớp cơ sở. Trong kiểu kế thừa này, nhiều hơn một lớp dẫn xuất chia sẻ cùng một lớp cha

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Chương trình sau minh họa kế thừa phân cấp trong PHP

// lớp cơ sở tên là "Trang sức"

trang sức đẳng cấp {

chức năng công khai Đồ trang sức () {

echo 'Lớp này là trang sức'. PHP_EOL;

}

}

// lớp dẫn xuất có tên "Vòng cổ"

lớp Vòng cổ mở rộng Trang sức {

}

// lớp dẫn xuất có tên "Vòng cổ"

đẳng cấp Vòng tay mở rộng Trang sức {

}

// tạo các đối tượng của

// các lớp dẫn xuất

// "Vòng cổ" và "Vòng tay"

$n = Vòng cổ mới();

$b = Vòng tay mới();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?
 

Công cụ sửa đổi quyền truy cập được bảo vệ trong PHP

Như đã thảo luận trước đó, các thành viên được bảo vệ của một lớp chỉ có thể được truy cập trong lớp đó và bởi các lớp dẫn xuất kế thừa nó. Ngay cả một thể hiện của lớp dẫn xuất cũng không thể truy cập thành viên được bảo vệ của lớp cơ sở của nó, bên ngoài lớp đó. Điều này có nghĩa là các thành viên được bảo vệ chỉ có thể được truy cập bởi lớp dẫn xuất và chính lớp cơ sở, chứ không phải bất kỳ nơi nào khác trong chương trình.  

Các chương trình sau minh họa khả năng truy cập của các thành viên được bảo vệ trong PHP

// lớp cơ sở tên là "Trang sức"

trang sức đẳng cấp {

$chi phí công cộng = 10000;

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

// của lớp cơ sở

chức năng được bảo vệ hiển thị() {

echo 'Đây là lớp cơ sở. '. PHP_EOL;

}

}

// lớp dẫn xuất có tên "Vòng cổ"

lớp Vòng cổ mở rộng Trang sức {

chức năng công cộng show() {

echo 'Đây là lớp con. '. PHP_EOL;

}

}

// tạo một đối tượng của lớp dẫn xuất

$obj = Vòng cổ mới();

//gọi hàm của lớp dẫn xuất

$obj->show();

// gọi hàm "được bảo vệ" của lớp cơ sở

$obj->hiển thị();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Trong chương trình trên, một thể hiện của lớp dẫn xuất cố gắng gọi một hàm thành viên được bảo vệ của lớp cơ sở bên ngoài cả hai lớp. Đó là lý do tại sao chương trình bị lỗi

Vấn đề này có thể được giải quyết bằng phương pháp công khai. Vì một thành viên được bảo vệ có thể được truy cập trực tiếp bên trong lớp dẫn xuất, nên việc gọi thành viên được bảo vệ trong một phương thức công khai của lớp dẫn xuất giúp đạt được nhiệm vụ truy cập thành viên được bảo vệ một cách gián tiếp

Chương trình sau minh họa điều này

// lớp cơ sở tên là "Trang sức"

trang sức đẳng cấp {

$chi phí công cộng = 10000;

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

// của lớp cơ sở

chức năng được bảo vệ hiển thị() {

echo 'Đây là lớp cơ sở. '. PHP_EOL;

}

}

// lớp dẫn xuất có tên "Vòng cổ"

lớp Vòng cổ mở rộng Trang sức {

chức năng công cộng show() {

echo 'Đây là lớp con. '. PHP_EOL;

// hàm thành viên được bảo vệ của lớp cơ sở

// có thể được truy cập trong lớp dẫn xuất này

$this->display();

}

}

// tạo một đối tượng của lớp dẫn xuất

$obj = Vòng cổ mới();

//gọi hàm của lớp dẫn xuất

$obj->show();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?
 

Ghi đè các phương thức kế thừa trong PHP

Chức năng ghi đè được hỗ trợ bởi tính kế thừa trong PHP. Có thể quan sát thấy khi cả lớp dẫn xuất và lớp cơ sở đều chứa một hàm có cùng tên. Cả hai hàm phải có cùng số đối số. Lớp dẫn xuất kế thừa các hàm thành viên và thành viên dữ liệu từ lớp cơ sở của nó. Vậy để ghi đè một chức năng nào đó, bạn thực hiện thao tác ghi đè chức năng.  

Chương trình sau minh họa khái niệm ghi đè phương thức trong PHP

// lớp cơ sở tên là "base_class"

lớp cơ sở_lớp {

// "show" hàm của lớp cơ sở

chức năng công cộng show() {

echo 'Đây là lớp cơ sở. '. PHP_EOL;

}

}

// lớp dẫn xuất có tên "derived_class"

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

// "show" hàm của lớp dẫn xuất

chức năng công cộng show() {

echo 'Đây là lớp dẫn xuất. '. PHP_EOL;

}

}

// tạo một đối tượng của lớp dẫn xuất

$obj = lớp dẫn xuất mới();

// sẽ gọi "show"

// hàm của lớp dẫn xuất

$obj->show();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Trong chương trình trên, cả lớp cơ sở (i. e. lớp cơ sở) và lớp dẫn xuất (i. e. dẫn xuất_class) có một chức năng gọi là "hiển thị". Nếu một thể hiện của lớp dẫn xuất gọi hàm show(), thì PHP sẽ gọi hàm show() của lệnh gọi dẫn xuất. Điều này là do lớp dẫn xuất ghi đè show() của lớp cơ sở bằng phương thức show() của chính nó. Nếu một thể hiện của lớp cơ sở sử dụng phương thức show() thì sẽ không có sự ghi đè của phương thức

Từ khóa cuối cùng trong PHP

Cuối cùng là một từ khóa quan trọng trong các khái niệm OOP trong PHP và được tìm thấy trong các ngôn ngữ lập trình khác nhau như Java, JavaScript, v.v. Tuy nhiên, từ khóa Final phục vụ các mục đích khác nhau trong các ngôn ngữ khác nhau.  

Trong PHP, từ khóa cuối cùng phục vụ các mục đích khác nhau tùy thuộc vào việc nó được sử dụng với một lớp hay một phương thức

  • Từ khóa cuối cùng được sử dụng với một lớp. Từ khóa cuối cùng với một lớp, phục vụ mục đích ngăn chặn sự kế thừa. Nếu một lớp được khai báo là cuối cùng, sử dụng từ khóa “cuối cùng”, thì việc kế thừa lớp đó sẽ khiến chương trình báo lỗi. Điều này có thể hữu ích trong trường hợp bạn không muốn một lớp và các thành viên của nó được truy cập ở bất kỳ nơi nào khác trong chương trình.  

Chương trình sau minh họa khái niệm từ khóa “cuối cùng” với các lớp trong PHP

Ghi chú. Mã này sẽ báo lỗi khi chúng tôi đang cố gắng kế thừa một lớp cuối cùng

trang sức lớp cuối cùng {

chức năng cuối cùng displayMessage() {

tiếng vang "Tôi là một lớp học cuối cùng. Bạn không thể kế thừa tài sản của tôi. “;

}

chức năng in() {

echo "Tôi là chức năng của lớp Trang sức. “;

}

}

lớp testClass mở rộng Đồ trang sức {

chức năng hiển thị() {

echo "Tôi là chức năng của lớp kiểm tra. “;

}

}

$obj = new testClass;

$obj->show();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?
 

  • Từ khóa cuối cùng được sử dụng với một phương thức. Từ khóa cuối cùng khi được sử dụng với một phương thức, nhằm mục đích ngăn chặn việc ghi đè phương thức. Nếu một phương thức đã được khai báo là cuối cùng, sử dụng từ khóa “cuối cùng”, thì một hàm khác có cùng tên và cùng tham số không thể được định nghĩa trong lớp dẫn xuất. Gọi một hàm như vậy sẽ khiến chương trình báo lỗi.  

Các chương trình sau minh họa khái niệm từ khóa “cuối cùng” với các phương thức trong PHP

Không có từ khóa cuối cùng (sẽ tạo đầu ra, nhưng sẽ gây ra ghi đè phương thức)

trang sức đẳng cấp {

hàm printMessage() {

echo "Tôi là hàm của lớp dẫn xuất. “;

}

}

lớp testClass mở rộng Đồ trang sức {

hàm printMessage() {

echo "Tôi là hàm của lớp dẫn xuất. “;

}

}

$ob = new testClass;

$ob->printMessage();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Với từ khóa cuối cùng. (SẼ đưa ra một lỗi, để ngăn việc ghi đè phương thức)

trang sức đẳng cấp {

chức năng cuối cùng printMessage() {

echo "Tôi là hàm của lớp dẫn xuất. “;

}

}

lớp testClass mở rộng Đồ trang sức {

hàm printMessage() {

echo "Tôi là hàm của lớp dẫn xuất. “;

}

}

   

$ob = new testClass;

$ob->printMessage();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Khóa học Full Stack Web Developer

Để trở thành chuyên gia về MEAN Stack Xem khóa học

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Đa kế thừa trong PHP bằng cách sử dụng Đặc điểm hoặc Giao diện

Đa thừa kế là kiểu thừa kế trong đó một lớp có thể kế thừa các thuộc tính của nhiều lớp cha. Trong kiểu kế thừa này, có một lớp dẫn xuất, được dẫn xuất từ ​​nhiều lớp cơ sở. Đây là một trong những khái niệm quan trọng và hữu ích nhất được cung cấp trong mô hình hướng đối tượng và phục vụ mục đích mà bạn muốn một lớp kế thừa các loại thuộc tính khác nhau (nằm trong các lớp khác nhau).  

Ví dụ, hãy xem xét một lớp có tên là con vẹt. Bây giờ, vì một con vẹt là một con chim và nó cũng có thể là một con vật cưng hoặc đơn giản là một sinh vật sống, vì vậy, lớp con vẹt có thể phục vụ các thuộc tính khác nhau. Vì vậy,  bằng cách sử dụng nhiều kế thừa, lớp vẹt có thể kế thừa các thuộc tính của cả ba lớp chim, thú cưng và sinh vật sống

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Nhiều ngôn ngữ lập trình không hỗ trợ đa kế thừa trực tiếp như Java và PHP. Tuy nhiên, PHP cung cấp một số cách để thực hiện đa kế thừa trong chương trình của bạn. Trong ngôn ngữ lập trình PHP, đa kế thừa đạt được bằng cách sử dụng hai cách

  • đặc điểm

Các đặc điểm được sử dụng để giảm độ phức tạp của chương trình bằng cách viết các chức năng nhất quán có thể được sử dụng bởi các lớp khác trong chương trình. Một đặc điểm giống như một lớp, nó có thể có các chức năng cũng như các phương thức trừu tượng. Các chức năng được xác định trong một đặc điểm có thể được truy cập bởi các lớp khác trong chương trình PHP.  

Các đặc điểm có thể được sử dụng để triển khai khái niệm đa kế thừa trong PHP.  

cú pháp

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

sử dụng trait_name;

    

    

// hàm base_class

}

Chương trình sau minh họa việc sử dụng các đặc điểm để thực hiện đa kế thừa.  

// khai báo một lớp

lớp Chim {

chức năng công khai hiển thị() {

echo "Tôi là một con chim," ;

}

}

// khai báo một đặc điểm

đặc điểm Thú cưng {

chức năng công cộng show() {

tiếng vang " một con vật cưng";

}

}

// khai báo lớp dẫn xuất

lớp Con vẹt kéo dài Con chim {

// từ khóa "used" để sử dụng đặc điểm

sử dụng Pet;

chức năng công khai msg() {

echo ", và một con vẹt. “;

}

}

// khai báo đối tượng của lớp dẫn xuất

$test = con vẹt mới();

$test->display();

$test->show();

$test->msg();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

  • giao diện

Giao diện được sử dụng khi có các đối tượng có cùng chức năng nhưng bạn không muốn các đối tượng biết về nhau. Nói cách khác, một giao diện cung cấp các hợp đồng cho các đối tượng mà không cần biết bất cứ điều gì khác về nhau

Các giao diện cũng có thể được sử dụng để thực hiện đa kế thừa trong PHP

cú pháp

// sử dụng từ khóa "triển khai"

// để sử dụng giao diện

lớp dẫn xuất_lớp mở rộng cơ sở_class thực hiện giao diện_name

Chương trình sau minh họa việc sử dụng các giao diện để thực hiện đa kế thừa.  

// định nghĩa một lớp

lớp Chim {

hàm công khai insideBird() {

tiếng vang "Tôi là con chim," ;

}

}

// khai báo một giao diện

giao diện Pet {

chức năng công khai bên trongPet();

}

// định nghĩa một lớp dẫn xuất

// kế thừa từ lớp Bird

// và triển khai giao diện Pet

lớp Vẹt kéo dài Nông cụ Chim Cưng {

hàm bên trongPet() {

tiếng vang "và một con vật cưng," ;

}

chức năng công khai bên trongParrot() {

echo "và một con vẹt. “;

}

}

// tạo đối tượng của lớp dẫn xuất

$obj = con vẹt mới();

$obj->insideBird();

$obj->insidePet();

$obj->insideParrot();

?>

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?

Tầm quan trọng của tính kế thừa trong PHP

Bản thân tính kế thừa là một trong những khái niệm quan trọng nhất được giới thiệu trong lập trình hướng đối tượng. Sau đây là một số điểm chính nhấn mạnh tầm quan trọng của tính kế thừa trong PHP

  • khả năng tái sử dụng mã. Kế thừa hỗ trợ mạnh mẽ khả năng sử dụng lại mã. Vì các chức năng và thuộc tính của một lớp có thể được kế thừa và sử dụng bởi các lớp khác nên không cần phải viết lặp đi lặp lại các chức năng đó trong các phần khác nhau của chương trình
  • Ẩn dữ liệu. Ẩn dữ liệu là một trong những khía cạnh quan trọng nhất của kế thừa. Khả năng truy cập của dữ liệu có thể được kiểm soát dễ dàng bằng cách sử dụng các công cụ sửa đổi truy cập và chỉ những dữ liệu cần thiết mới được phép truy cập bên ngoài lớp
  • khả năng mở rộng. Kế thừa cung cấp một cách để viết các chương trình có thể mở rộng. Điều này có nghĩa là các chức năng hoặc lớp được yêu cầu có thể được mở rộng khi có yêu cầu về sự phát triển của chương trình hoặc ứng dụng trong tương lai.  
  • ghi đè. Khái niệm ghi đè phương thức có thể dễ dàng đạt được trong PHP. Các phương thức của lớp cơ sở có thể được định nghĩa lại trong lớp dẫn xuất theo yêu cầu của chương trình. Các hàm đó được ghi đè trong lớp dẫn xuất mà không gây ra bất kỳ lỗi nào
  • Giảm độ phức tạp. Độ phức tạp của mã cũng giảm vì các thuộc tính chung có thể được kế thừa một cách đơn giản mà không cần phải khai báo lại chúng. Điều này làm cho mã thuận tiện
Bạn có phải là nhà phát triển web hoặc quan tâm đến việc xây dựng một trang web? . Khám phá bản xem trước khóa học

kết thúc

Trong bài viết này, bạn đã học về thừa kế trong PHP. Bạn đã khám phá sâu về PHP và các khái niệm hướng đối tượng của nó. Bạn đã tìm hiểu sâu về cách sử dụng, loại, chế độ và tất cả các khái niệm quan trọng khác về thừa kế. Bài viết này đã thảo luận chi tiết về một số khái niệm liên quan khác như từ khóa cuối cùng, ghi đè phương thức, công cụ sửa đổi truy cập, v.v.

Để bắt đầu với PHP khi mới bắt đầu, bạn có thể tham khảo video này. Tham gia khóa học trực tuyến Đào tạo PHP của chúng tôi để học PHP và xây dựng các ứng dụng động được hướng dẫn bởi các chuyên gia trong ngành. Nếu bạn là một chuyên gia PHP, bạn có thể đăng ký Khóa đào tạo phát triển PHP nâng cao của chúng tôi để nâng cao kỹ năng. Điều này sẽ cho phép bạn tìm hiểu các khái niệm PHP nâng cao như phiên, cookie, v.v.

Không chỉ dừng lại ở đây. Để tìm hiểu cách phát triển MEAN stack và để bạn có cơ hội làm việc cho những gã khổng lồ công nghệ hàng đầu, hãy xem khóa học của chúng tôi về Full Stack Web Developer - MEAN Stack. Trong khóa học này, bạn sẽ học một số kỹ năng hot nhất như Node, Mongo, v.v. điều đó sẽ giúp bạn đặt chân vào phát triển web chuyên nghiệp. Để có danh sách đầy đủ các khóa học miễn phí do Simplilearn cung cấp, hãy truy cập

Nếu bạn có bất kỳ câu hỏi nào cho chúng tôi, vui lòng đề cập đến chúng trong phần bình luận và chúng tôi sẽ có các chuyên gia của chúng tôi trả lời chúng cho bạn

học tập vui vẻ

Tìm Chương trình sau đại học của chúng tôi trong Chương trình đào tạo trực tuyến về phát triển web Full Stack tại các thành phố hàng đầu

NameDatePlacePost Chương trình sau đại học trong Full Stack Web DevelopmentCohort bắt đầu vào ngày 2 tháng 2 năm 2023,
Đợt cuối tuầnChi tiết CityView của bạnChương trình sau đại học về Phát triển Web Full Stack, SingaporeCohort bắt đầu vào ngày 16 tháng 2 năm 2023,
Đợt cuối tuầnSingaporeXem chi tiếtChương trình sau đại học về Phát triển Web Full StackNhóm bắt đầu vào ngày 1 tháng 3 năm 2023,
Lô hàng cuối tuầnChi tiết CityView của bạn

Thông tin về các Tác giả

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng của lớp cha từ lớp con của nó trong PHP?
đơn giản

Simplilearn là một trong những nhà cung cấp dịch vụ đào tạo trực tuyến hàng đầu thế giới về Tiếp thị kỹ thuật số, Điện toán đám mây, Quản lý dự án, Khoa học dữ liệu, CNTT, Phát triển phần mềm và nhiều công nghệ mới nổi khác

Điều gì xảy ra nếu bạn cố gắng truy cập một phương thức riêng tư của lớp cha từ lớp con của nó?

Hoàn toàn không có cách nào để thực hiện điều này . Bạn không thể gọi một phương thức riêng của một lớp từ bất kỳ lớp nào khác (có thể là lớp mở rộng). Nó chỉ có thể được truy cập bên trong chính lớp đó. Có một lý do nó được cho là riêng tư.

Chúng ta có thể truy cập các thành viên private của lớp cha trong lớp con không?

Kế thừa có nghĩa là một đối tượng của lớp con tự động bao gồm các trường đối tượng và phương thức được định nghĩa trong lớp cha. Tuy nhiên, nếu các trường được kế thừa là riêng tư, thì lớp con không thể truy cập trực tiếp vào các trường được kế thừa bằng cách sử dụng ký hiệu dấu chấm

Tôi có thể truy cập phương thức lớp cha bằng đối tượng lớp con không?

Nó có tất cả các biến thể hiện. Khía cạnh bất thường duy nhất là, trong các định nghĩa phương thức của lớp con, bạn không thể truy cập trực tiếp các biến thể hiện của lớp cha . Ví dụ: nếu cấp độ gốc có biến thể hiện chiều cao, định nghĩa phương thức của lớp con sẽ không thể truy cập trực tiếp vào biến này.

Phương pháp cha mẹ có thể là riêng tư?

Đối với phản ánh. Có, có thể .