Quá tải và ghi đè trong PHP là gì?

Nạp chồng và ghi đè hàm là đặc điểm nổi bật của lập trình hướng đối tượng trong PHP. Nạp chồng hàm có nghĩa là nhiều hàm có cùng tên nhưng khác tham số. Nhưng trong trường hợp ghi đè hàm, nhiều hàm sẽ có cùng chữ ký phương thức và số lượng đối số

PHP không hỗ trợ nạp chồng hàm trực tiếp như các ngôn ngữ khác như C++, JAVA, v.v. Nhưng chúng ta có thể giải quyết vấn đề này bằng cách sử dụng phương thức __call() kỳ diệu của PHP. Vì vậy, hãy xem cách quá tải và ghi đè hoạt động trong PHP

Nạp chồng hàm trong PHP

Nạp chồng hàm chứa cùng một tên hàm và hàm này thực hiện một tác vụ khác tùy thuộc vào số lượng đối số

Hãy thảo luận về cách đạt được quá tải trong PHP. Trong trường hợp của PHP, chúng ta cần sử dụng các phương thức ma thuật __call() của PHP để đạt được nạp chồng phương thức. Trong PHP, nạp chồng có nghĩa là hành vi của phương thức thay đổi linh hoạt tùy thuộc vào các tham số đầu vào. Trong hướng dẫn này, chúng ta sẽ hiểu những nhận thức này. Hãy cùng phân tích phương thức __call()

__gọi()

Nếu một lớp thực hiện __call(), thì nếu một đối tượng của lớp đó được gọi bằng một phương thức không tồn tại, thì __call() sẽ được gọi thay vì phương thức đó

Thí dụ

area(3);
   $rect = new Shape();
   echo $rect->area(8,6);
?>

đầu ra. Điều này sẽ tạo ra đầu ra sau

9.42648
48

Ghi đè hàm trong PHP

Ghi đè hàm trong PHP khá dễ dàng. Ghi đè là quá trình sửa đổi một cái gì đó của phương thức kế thừa. Có nghĩa là trong ghi đè hàm, lớp cha và lớp con có cùng tên hàm và số đối số

Trong ví dụ dưới đây, bạn thấy hai lớp Cơ sở và Dẫn xuất. Cas có nguồn gốc kéo dài đến Cơ sở. Điều đó có nghĩa là Derived có thể truy cập lớp cha. Ở đây bạn thấy lớp cha có hàm demo() và lớp con cũng có hàm demo() có cùng tên và cùng đối số. Ở đây bạn thấy tình huống ghi đè chức năng trong đó lớp con ghi đè chức năng của lớp cơ sở

demo();
   $ob->display();
   $ob2 = new Derived;
   $ob2->demo();
   $ob2->display();
?>

đầu ra. Điều này sẽ tạo ra đầu ra sau

Base class function!
Base class function declared final!
Derived class function!
Base class function declared final!

Thêm câu hỏi phỏng vấn

Câu hỏi và câu trả lời phỏng vấn PHP OOPS (2022)

Câu hỏi và câu trả lời phỏng vấn PHP

Nút. Câu hỏi và câu trả lời phỏng vấn Js

Câu hỏi và câu trả lời phỏng vấn CodeIgniter

Câu hỏi và câu trả lời phỏng vấn JavaScript

Câu hỏi và câu trả lời phỏng vấn MySQL mới nhất

Câu hỏi và câu trả lời phỏng vấn Laravel

Phần kết luận

Trong bài viết này, chúng tôi hiểu chức năng nạp chồng và ghi đè với sự trợ giúp của ví dụ. nếu bạn có bất kỳ vấn đề nào để hiểu xin vui lòng bình luận, tôi sẽ cố gắng trả lời càng sớm càng tốt

Phương pháp lập trình hướng đối tượng, thường được viết tắt là OOPS, là nền tảng của tất cả các ngôn ngữ lập trình hiện đại. Các ngôn ngữ này tuân thủ và triển khai các khái niệm về lập trình hướng đối tượng với rất ít loại trừ. Hai trong số các khái niệm đó rất quan trọng - nạp chồng phương thức và ghi đè phương thức

Quá tải phương thức là gì?

Nạp chồng phương thức là khái niệm định nghĩa hai hoặc nhiều phương thức có cùng tên nhưng chữ ký khác nhau. Một trong hai phương thức này được gọi dựa trên số lượng tham số được truyền

Ghi đè phương thức là gì?

Bắt đầu khóa học phát triển phần mềm miễn phí của bạn

Phát triển web, ngôn ngữ lập trình, kiểm thử phần mềm và những thứ khác

Ghi đè phương thức là khái niệm xác định hai hoặc nhiều phương thức giống hệt nhau, có cùng tên và chữ ký. Một trong hai phương pháp này được gọi dựa trên đối tượng gọi

Gói phát triển phần mềm tất cả trong một(hơn 600 khóa học, hơn 50 dự án)

Quá tải và ghi đè trong PHP là gì?
Quá tải và ghi đè trong PHP là gì?
Quá tải và ghi đè trong PHP là gì?
Quá tải và ghi đè trong PHP là gì?

Quá tải và ghi đè trong PHP là gì?
Quá tải và ghi đè trong PHP là gì?
Quá tải và ghi đè trong PHP là gì?
Quá tải và ghi đè trong PHP là gì?

Giá bán
Xem các khóa học

Hơn 600 khóa học trực tuyến. hơn 50 dự án. Hơn 3000 giờ. Giấy chứng nhận có thể kiểm chứng. Truy cập trọn đời
4. 6 (86.560 xếp hạng)

So sánh trực tiếp giữa nạp chồng phương thức và ghi đè phương thức (Infographics)

Dưới đây là 10 điểm khác biệt hàng đầu giữa Nạp chồng Phương thức và Ghi đè Phương thức

Quá tải và ghi đè trong PHP là gì?

Sự khác biệt chính giữa Nạp chồng phương thức và Ghi đè phương thức

Sau đây là những điểm khác biệt chính giữa Nạp chồng phương thức và Ghi đè phương thức

  • Sự khác biệt cơ bản nhất ở đây là quá tải đạt được trong cùng một lớp, trong khi ghi đè yêu cầu lớp cha và lớp con ở mức tối thiểu
  • Một khái niệm quan trọng khác cần ghi nhớ là các phương thức quá tải bị ràng buộc tại thời điểm biên dịch với các lệnh gọi phương thức. Điều này có nghĩa là trình biên dịch biết phương thức nào sẽ gọi trước khi mã được chạy
    Các phương thức ghi đè bị ràng buộc trong thời gian chạy. Đối tượng gọi xác định xem phương thức của lớp cha phải được gọi hay phương thức của lớp con. Điều này có thể dẫn đến nhiều ngoại lệ trong thời gian chạy hơn nếu không được xử lý đúng cách
  • Các phương thức tĩnh có thể bị quá tải nhưng không bị ghi đè. Điều này là do các đối tượng của lớp không gọi các phương thức tĩnh. Ghi đè phương thức được xác định bởi đối tượng gọi phương thức. Do đó, các phương thức tĩnh không thể bị ghi đè

Bảng so sánh nạp chồng phương thức và ghi đè phương thức

Dưới đây là bảng so sánh cho thấy sự tương đồng giữa Nạp chồng Phương thức và Ghi đè Phương thức

Cơ sở so sánh giữa Method Overloading và Method OverridingMethod OverloadingMethod OverridingDefinitionMethod Overloading là khái niệm định nghĩa hai hoặc nhiều phương thức có cùng tên nhưng khác chữ ký. Ghi đè phương thức là khái niệm xác định hai hoặc nhiều phương thức giống hệt nhau, có cùng tên và chữ ký. Thời gian biên dịch ràng buộc phương thức. Việc ràng buộc các định nghĩa phương thức quá tải với các lệnh gọi phương thức tương ứng được thực hiện tại thời điểm biên dịch. Thời gian chạy. Việc ràng buộc các định nghĩa phương thức bị ghi đè với các lệnh gọi phương thức của chúng được thực hiện trong thời gian chạy. Loại liên kết phương thức Liên kết tĩnh Liên kết động Hạn chế lớp Nạp chồng phương thức có thể đạt được trong cùng một lớp hoặc trong các lớp khác nhau. Không hạn chế. Ghi đè phương thức đạt được trong các lớp khác nhau. Các lớp này có quan hệ cha-con. Hạn chế chữ ký Các phương thức quá tải phải khác nhau về chữ ký của chúng. Số lượng tham số hoặc loại tham số hoặc thứ tự tham số phải khác nhau. Các phương thức bị ghi đè có thể có cùng chữ ký, không hạn chế. Hạn chế phương thức tĩnh Phương thức tĩnh có thể bị quá tải. Điều này cho phép một lớp có nhiều hơn một phương thức tĩnh có cùng tên nhưng chữ ký khác nhau. Phương pháp tĩnh không thể được ghi đè. Nếu một lớp con có một phương thức tĩnh có cùng tên và chữ ký với lớp cha, thì nó được coi là một phương thức riêng biệt và không ghi đè lên phương thức của lớp cha. Kiểu trả về của phương thứcKiểu trả về của các phương thức quá tải không quan trọng. Các phương thức bị quá tải có thể có hoặc không có cùng kiểu trả về. Tuy nhiên, các phương thức có cùng tên và chữ ký nhưng chỉ khác nhau về kiểu trả về không thể bị quá tải. Các phương thức bị ghi đè có thể có các kiểu trả về cụ thể hơn. Một phương thức của lớp cha có thể trả về một đối tượng của lớp cha và một phương thức của lớp con, ghi đè phương thức của lớp cha, có thể trả về một đối tượng của lớp con. Sử dụng quá tải được thực hiện để triển khai các logic phương thức khác nhau trong khi vẫn giữ nguyên tên phương thức. Nó chủ yếu được thực hiện để viết một triển khai cụ thể của một phương thức được kế thừa từ lớp cha. Lợi íchTăng khả năng đọc chương trình
Tăng khả năng sử dụng lại mã. Giúp viết logic mã để xử lý các tình huống cụ thể bằng cách chuyển mã thông thường. Liên quan Khái niệm OOPS Kết hợp chặt chẽ với tính đa hình. Cùng một phương thức có thể thực hiện các hành động khác nhau dựa trên sự khác biệt về tham số. Đan chặt chẽ với một thừa kế. Một lớp con có thể đi chệch khỏi logic cha để xử lý một kịch bản cụ thể trong khi vẫn kế thừa các kịch bản khác

Ví dụ về Nạp chồng Phương thức và Ghi đè Phương thức trong Java

Sau đây là các ví dụ về Nạp chồng phương thức và Ghi đè phương thức trong Java

Ví dụ 1

Mã số

class Hello
{
public void SayHello()
{
System.out.println("Hello World!");
}
//overloading method
public void SayHello(String name)
{
System.out.println("Hello "+name+"!");
}
}
class Main
{
public static void main(String args[])
{
Hello obj = new Hello();
obj.SayHello();
obj.SayHello("Charlie");
}
}

đầu ra

Quá tải và ghi đè trong PHP là gì?

Ví dụ #2

Mã số

class Hello{
public String name = "Abc";
public void SayHello(){
System.out.println("Hello World!");
}
}
class HelloMale extends Hello{
public void SayHello(){
System.out.println("Hello Mr. "+name+"!");
}
}
class HelloFemale extends Hello{
public void SayHello(){
System.out.println("Hello Ms. "+name+"!");
}
}
class Main {
public static void main(String args[]){
new Hello().SayHello();
new HelloMale().SayHello();
new HelloFemale().SayHello();
}
}

đầu ra

Quá tải và ghi đè trong PHP là gì?

Ví dụ về trường hợp sử dụng nghiệp vụ

Giả sử bạn cần triển khai ứng dụng thanh toán cho một doanh nghiệp chấp nhận tất cả các loại thẻ, ngân hàng trực tuyến, ví thanh toán, v.v. Bây giờ, bạn có hai cách để thực hiện điều này

  • Xác định các tên khác nhau cho từng loại thanh toán, chẳng hạn như Payment_Card(), Payment_Netbanking(), Payment_Wallets(), v.v.
  • Nạp chồng tên phương thức với các chữ ký khác nhau – Thanh toán(card_number, cvv), Thanh toán(netbanking_id, auth_token), Thanh toán(wallet_number), v.v.

Không phải là cách thứ hai sạch hơn?

Hãy tiến thêm một bước để hiểu ghi đè. Hiện nay có rất nhiều nhà cung cấp dịch vụ thẻ như VISA, MasterCard, AmericanExpress, Rupay, v.v. Giả sử tất cả đều sử dụng một cổng thanh toán chung ngoại trừ Rupay có cổng thanh toán riêng. Bây giờ bạn sẽ viết một lớp cha chứa định nghĩa phương thức để chấp nhận thanh toán qua cổng thanh toán chung. Lớp con của Rupay sẽ kế thừa tất cả các tính năng của lớp cha và chỉ ghi đè lên một tính năng - phương thức cổng thanh toán. Xét cho cùng, lớp con chỉ khác ở phương thức cổng thanh toán. Tất cả các tính năng khác, chẳng hạn như số thẻ, mã thông báo bảo mật, v.v. , giống nhau

Phần kết luận

Như vậy, chúng ta đã biết được sự khác biệt cơ bản giữa hai khái niệm cơ bản nhất trong lập trình hướng đối tượng là Overloading và Overriding. Chúng tôi đã viết một ví dụ cơ bản và hiểu một kịch bản kinh doanh thực tế trong đó có thể triển khai quá tải và ghi đè. Cả hai khái niệm đều dễ hiểu về mặt lý thuyết nhưng cần thực hành để áp dụng trong các tình huống thực tế. Do đó, rất nên tạo thói quen sử dụng quá tải và ghi đè càng nhiều càng tốt trong các chương trình của bạn. Điều này sẽ giúp bạn rất nhiều trong việc nắm bắt nó

Bài viết được đề xuất

Đây là hướng dẫn về Sự khác biệt giữa Nạp chồng Phương thức và Ghi đè Phương thức. Ở đây chúng tôi thảo luận về Sự khác biệt quan trọng hàng đầu giữa Quá tải và Ghi đè bằng đồ họa thông tin và ví dụ. Bạn cũng có thể xem các bài viết sau để tìm hiểu thêm –

Quá tải và ghi đè là gì?

Quá tải phương thức được sử dụng để tăng khả năng đọc của chương trình. Ghi đè phương thức được sử dụng để cung cấp triển khai cụ thể của phương thức đã được siêu lớp của nó cung cấp. 2) Quá tải phương thức được thực hiện trong lớp

Quá tải trong PHP là gì?

Nạp chồng hàm trong PHP được dùng để tạo động các thuộc tính và phương thức . Các thực thể động này được xử lý bằng các phương thức ma thuật có thể được sử dụng trong một lớp cho các loại hành động khác nhau. Nạp chồng hàm chứa cùng một tên hàm và hàm đó thực hiện các tác vụ khác nhau tùy theo số lượng đối số.

PHP có quá tải không?

Nạp chồng ¶ Nạp chồng trong PHP cung cấp phương tiện để tự động tạo các thuộc tính và phương thức. Các thực thể động này được xử lý thông qua các phương thức ma thuật mà người ta có thể thiết lập trong một lớp cho các loại hành động khác nhau

Tại sao quá tải không được hỗ trợ trong PHP?

Bạn không thể quá tải các hàm PHP. Chữ ký hàm chỉ dựa trên tên của chúng và không bao gồm danh sách đối số, vì vậy bạn không thể có hai hàm có cùng tên . Quá tải phương thức lớp trong PHP khác với nhiều ngôn ngữ khác. PHP sử dụng cùng một từ nhưng nó mô tả một mẫu khác.