Ví dụ về quá tải và ghi đè trong php là gì?

Khái niệm Nạp chồng và Ghi đè hàm trong PHP xuất phát từ tính đa hình của OOP. Theo Lập trình hướng đối tượng, nạp chồng hàm có nghĩa là nhiều phương thức/hàm có cùng tên nhưng khác tham số. Và trong lớp con có cùng tên, cùng tham số với lớp cha, nó được gọi là ghi đè phương thức

Nói chung, 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ể khắc phục vấn đề này bằng cách sử dụng phương thức ma thuật PHP __call(). Vì vậy, hãy xem quá tải và ghi đè trong PHP hoạt động như thế nào

Cách giải thích của PHP về quá tải
khác với hầu hết các ngôn ngữ hướng đối tượng. Quá tải truyền thống cung cấp khả năng có nhiều phương thức có cùng tên nhưng số lượng và loại đối số khác nhau

Tài liệu chính thức PHP

Quá tải trong PHP

Hãy xem chỗ nào chúng ta không thể sử dụng nạp chồng hàm trong PHP mà chúng ta có thể dễ dàng sử dụng bằng ngôn ngữ khác. Ví dụ, xem tập lệnh PHP sau

<?php

/**
 * @author: Sohel Rana
 * @URI: http://sohelrana.me
 * @description: Function overloading error with PHP.
 */
class SocialMedia
{

    public function sharaMessage($para)
    {

        echo "sharaMessage() with one parameter";

    }

    public function sharaMessage($para1, $para2)
    {

        echo "sharaMessage() with two parameter";

    }

}

$object = new SocialMedia();
$object->sharaMessage('Hello World');

Nếu chúng tôi chuyển đoạn mã này sang C++ hoặc JAVA thì nó sẽ hoạt động bình thường. Đây là ví dụ cơ bản về nạp chồng hàm cho ngôn ngữ lập trình C++ hoặc JAVA. nhưng mã này sẽ không hoạt động cho PHP. Nó sẽ hiển thị “Lỗi nghiêm trọng PHP. Không thể khai báo lại SocialMedia. thông báo lỗi sharaMessage()”. Nhưng nếu chúng ta muốn làm điều gì đó như vậy, thì chúng ta sẽ phải sử dụng phương thức ma thuật PHP __call(). Với phương pháp ma thuật đó, bạn thực sự có thể thực hiện quá tải phương thức

Giải pháp

<?php

/**
 * @author: Sohel Rana
 * @URL: http://sohelrana.me
 * @description: Function overloading in PHP.
 */
class SocialMedia
{

    public function __call($funName, $arguments)
    {

        $funArray = array('sharaMessage', 'sharaMessage2');
        if (in_array($funName, $funArray) === false) {
            die("Method does not exist");
        }

        if (count($arguments) === 2) {
            $this->sharaMessage2($arguments[0], $arguments[1]);
        } elseif (count($arguments) === 1) {
            $this->sharaMessage($arguments[0]);
        } else {
            echo "Unknown method";
            return false;
        }
    }

    public function sharaMessage($para)
    {

        echo "sharaMessage() with one parameter";

    }

    public function sharaMessage2($para1, $para2)
    {

        echo "sharaMessage() with two parameter";

    }

}

$object = new SocialMedia();
$object->sharaMessage('hello');
$object->sharaMessage2('hello', "hello2");
$object->sharaMessage3('hello');

Xem đoạn mã trên, ở đây hàm __call được kích hoạt khi gọi các phương thức không thể truy cập trong ngữ cảnh đối tượng. Nếu bạn có thắc mắc về quá tải trong PHP, hãy viết bình luận

Ghi đè chức năng

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. Theo nghĩa OOP nếu một lớp cha có một chức năng (e. g testMethod()) và một lớp khác kế thừa từ lớp cha đó. Và lớp con đó có cùng một phương thức (e. g testMethod()), điều đó có nghĩa là testMethod() của lớp con ghi đè lên testMethod() của lớp cha. Cái đó gọi là ghi đè hàm. Đừng nhầm lẫn nó với chức năng quá tải

Thí dụ

<?php
/**
 * @author: Sohel Rana
 * @URL: http://sohelrana.me
 * @description: Function uverriding PHP.
 */

class ParentClass {
    public function sharing() {
        echo "sharing parent class";
    }
}

class ChildClass extends ParentClass {

    public function sharing() {
        echo "sharing child ";
    }
}

$obj1 = new ParentClass();
$obj2 = new ChildClass();

$obj1->sharing();
$obj2->sharing();

Từ đoạn mã trên, bạn có thể thấy chức năng chia sẻ lớp ParentClass(). ChildClass kế thừa từ ParentClass. Và ChildClass cũng có chức năng shared() tương tự. Vì vậy, chia sẻ của ChildClass() ghi đè lớp ParentClass của anh ấy

Tôi hy vọng bài viết này sẽ giúp bạn hiểu về nạp chồng và ghi đè hàm trong PHP. mã hóa hạnh phúc. Để đọc thêm các bài viết liên quan đến PHP bấm vào đây

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

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)

Ví dụ về quá tải và ghi đè trong php là gì?
Ví dụ về quá tải và ghi đè trong php là gì?
Ví dụ về quá tải và ghi đè trong php là gì?
Ví dụ về quá tải và ghi đè trong php là gì?

Ví dụ về quá tải và ghi đè trong php là gì?
Ví dụ về quá tải và ghi đè trong php là gì?
Ví dụ về quá tải và ghi đè trong php là gì?
Ví dụ về 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.064 xếp hạng)

Quá tải 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

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ì?

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

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

Ví dụ về 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 hay 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

Ví dụ về 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

Ví dụ về 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 về 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. Rốt cuộc, lớp con chỉ khác nhau ở 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 –

Giải thích quá tải và ghi đè chức năng bằng một ví dụ trong PHP là gì?

Nạp chồng và ghi đè hàm là tính năng OOP trong PHP . Trong nạp chồng hàm, nhiều hàm có thể có cùng chữ ký phương thức nhưng số lượng đối số khác nhau. 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ố.

Quá tải và ghi đè bằng ví dụ là gì?

Khi chữ ký phương thức (tên và tham số) giống nhau trong lớp cha và lớp con, nó được gọi là ghi đè. Khi hai hoặc nhiều phương thức trong cùng một lớp có cùng tên nhưng khác tham số, nó được gọi là quá tải

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ố.

Ghi đè phương thức trong PHP với ví dụ là gì?

Khi bạn ghi đè một phương thức, bạn sẽ có hai phiên bản của cùng một phương thức. một ở lớp cha và một ở lớp con . $this->greet() sẽ gọi chính nó vô thời hạn. Trong ví dụ này, phương thức hello() của lớp Andoird gọi phương thức hello() của lớp Robot.