Làm cách nào chúng ta có thể gọi phương thức của lớp cha trong phần ghi đè trong php?

Từ đa hình có nghĩa là “có nhiều dạng”. Tính đa hình cho phép một lớp con định nghĩa phiên bản thành viên của chính nó, phiên bản này cũng được định nghĩa bởi lớp cha của nó. Chúng tôi thay đổi việc thực hiện một thành viên kế thừa

Nói một cách đơn giản, chúng tôi ghi đè bất kỳ phương thức nào tồn tại trong lớp cha bằng chức năng của riêng chúng tôi trong lớp con

Để ghi đè một phương thức trong lớp cha, chúng ta chỉ cần tạo một phương thức ở lớp con có cùng tên

class ParentClass {
    function methodName[]{
    }
}

class ChildClass {
    function methodName[] {
    }
}

Chúng ta không thể ghi đè một phương thức trong lớp cha nếu phương thức hoặc chính lớp đó được đánh dấu là cuối cùng. Chúng ta tìm hiểu thêm về final modifier trong bài hướng dẫn encapsulation

name = $animalName;
        }

        function move[] {
            echo "

Animal parent class: All animals can move. " . $this->name . " is moving...
"; } } class Dog extends Animal { function growl[] { echo "Dog child class: A dog can growl but a duck can't. " . $this->name . " is growling...

"; } function move[] { echo "

Dog child class: Overriding the move[] of the parent class. " . $this->name . " is walking...
"; } } class Duck extends Animal { function quack[] { echo "Duck child class: A duck can growl but a dog can't. " . $this->name . " is quacking...

"; } function move[] { echo "

Duck child class: Overriding the move[] of the parent class. " . $this->name . " is waddling...
"; } } $dog1 = new Dog["Fido"]; $dog1->move[]; $dog1->growl[]; $duck1 = new Duck["Donald"]; $duck1->move[]; $duck1->quack[]; ?>

Khi chúng ta chạy ví dụ trên, mỗi lớp con hiển thị một thông báo khác nhau khi phương thức move[] của chúng được gọi vì chúng ta ghi đè lên nó trong cả hai lớp

Nếu chúng ta ghi đè một phương thức cha trong một lớp, chúng ta vẫn có thể truy cập phương thức gốc ban đầu. Để làm điều này, chúng ta phải sử dụng toán tử phân giải phạm vi, còn được gọi là dấu hai chấm [. ]

Chúng tôi đã trình bày ngắn gọn về dấu hai chấm khi chúng tôi giải thích cách truy cập trực tiếp các thành viên của lớp bằng dấu hai chấm

Ví dụ, giả sử chúng ta không muốn ghi đè tất cả chức năng trong một phương thức của lớp cha, chúng ta chỉ muốn thêm vào nó

Chúng ta có thể ghi đè phương thức, triển khai chức năng của riêng mình, sau đó gọi phương thức cha bên trong phương thức con của chúng ta. Điều này cho phép phương thức con chứa chức năng của phương thức cha, cùng với chức năng tùy chỉnh của chúng tôi

I'm a method in the ParentClass";
        }
    }

    class ChildClass extends ParentClass {

        function method[] {
            echo "

Overloading method[] from the parent

"; ParentClass::method[]; } } $child1 = new ChildClass[]; $child1->method[]; ?>

Trong ví dụ trên, chúng ta ghi đè phương thức [] trong lớp con, cung cấp hành vi của riêng chúng ta cho nó. Chúng ta cũng gọi phương thức[] từ lớp cha với dấu hai chấm [. ], sẽ thực thi hành vi của phương thức gốc ban đầu

Bằng cách này, chúng tôi đã tùy chỉnh chức năng của mình trên chức năng ban đầu

Chúng tôi không phải chỉ định tên lớp một cách rõ ràng. Chúng ta có thể thay tên lớp bằng từ khóa parent

I'm a method in the ParentClass";
        }
    }

    class ChildClass extends ParentClass {

        function method[] {
            echo "

Overloading method[] from the parent

"; parent::method[]; } } $child1 = new ChildClass[]; $child1->method[]; ?>

Lớp trừu tượng & Giao diện

Cả lớp trừu tượng và giao diện đều đa hình. Chúng tôi đề cập đến các lớp trừu tượng trong bài học về đóng gói và giao diện trong bài học về giao diện

Lớp con sẽ kế thừa tất cả các thuộc tính và phương thức public và protected từ lớp cha. Ngoài ra, nó có thể có các thuộc tính và phương thức riêng

Một lớp kế thừa được định nghĩa bằng cách sử dụng từ khóa extends

Hãy xem một ví dụ

Ví dụ

class Fruit {
  public $name;
  public $color;
  public function __construct[$name, . ";
    $this->name = $name;
    $this->color = $color;
  }
  public function intro[] {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// Strawberry được kế thừa từ Fruit
class Strawberry mở rộng Fruit {
  public function message[] {
    echo "Am I a fruit or a berry? ";
  }
}
$strawberry = new Strawberry["Strawberry", "red"];
$strawberry->message[];
$strawberry->intro[];
?>

Tự mình thử »

Ví dụ giải thích

Lớp Strawberry được kế thừa từ lớp Fruit

Điều này có nghĩa là lớp Strawberry có thể sử dụng các thuộc tính public $name và $color cũng như các phương thức public __construct[] và intro[] từ lớp Fruit do tính kế thừa

Lớp Strawberry cũng có phương thức riêng. thông điệp[]

PHP - Kế thừa và Công cụ sửa đổi quyền truy cập được bảo vệ

Trong chương trước chúng ta đã biết rằng có thể truy cập các thuộc tính hoặc phương thức của protected trong lớp và bởi các lớp dẫn xuất từ ​​lớp đó. Điều đó nghĩa là gì?

Hãy xem một ví dụ

Ví dụ

class Fruit {
  public $name;
  public $color;
  public function __construct[$name, . ";
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro[] {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

class Strawberry extends Fruit {
  public function message[] {
    echo "Tôi là trái cây hay quả mọng?";
  }
}

// Thử gọi cả ba phương thức từ lớp bên ngoài
$strawberry = new Strawberry["Strawberry", "red"]; . __construct[] là công khai
$strawberry->message[]; . message[] được công khai
$strawberry->intro[]; . intro[] được bảo vệ
?>

Tự mình thử »

Trong ví dụ trên, chúng ta thấy rằng nếu chúng ta cố gọi một phương thức protected [intro[]] từ bên ngoài lớp, chúng ta sẽ gặp lỗi. public phương pháp sẽ hoạt động tốt

Hãy xem một ví dụ khác

Ví dụ

class Fruit {
  public $name;
  public $color;
  public function __construct[$name, . ";
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro[] {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

class Strawberry extends Fruit {
  public function message[] {
    echo "Tôi là trái cây hay quả mọng?";
    // Call protected method from within derived class - OK
    $this -> intro[];
  }
}

$strawberry = new Strawberry["Dâu", "đỏ"]; . __construct[] là công khai
$strawberry->message[]; . message[] là công khai và nó gọi intro[] [được bảo vệ] từ bên trong lớp dẫn xuất
?>

Tự mình thử »

Trong ví dụ trên, chúng tôi thấy rằng tất cả đều hoạt động tốt. Đó là bởi vì chúng ta gọi phương thức protected [intro[]] từ bên trong lớp dẫn xuất

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

Các phương thức kế thừa có thể được ghi đè bằng cách xác định lại các phương thức [sử dụng cùng tên] trong lớp con

Nhìn vào ví dụ dưới đây. Các phương thức __construct[] và intro[] trong lớp con [Strawberry] sẽ ghi đè lên các phương thức __construct[] và intro[] trong lớp cha [Fruit]

Làm cách nào để ghi đè phương thức của lớp cha trong PHP?

Trong ghi đè hàm, cả lớp cha và lớp con phải có cùng tên hàm và số đối số . Nó được sử dụng để thay thế phương thức cha trong lớp con. Mục đích của việc ghi đè là thay đổi hành vi của phương thức lớp cha. Hai phương thức có cùng tên và cùng tham số được gọi là ghi đè.

Làm cách nào để gọi một phương thức của lớp cha trong PHP?

Để chạy hàm tạo cha, gọi hàm cha. Cần có __construct[] bên trong hàm tạo con .

Làm thế nào bạn có thể gọi một lớp cha của một phương thức ghi đè trong một lớp con?

Siêu từ khóa trong Ghi đè phương thức. Từ khóa super được sử dụng để gọi phương thức/hàm tạo của lớp cha.

Chúng ta có thể gọi phương thức của lớp cha với đối tượng của lớp con mà không ghi đè không?

Chúng ta có thể gọi phương thức của lớp cha với đối tượng của lớp con mà không cần ghi đè không? . Nhưng mà; . If you override a parent method in its child, child objects will always use the overridden version. But; you can use the keyword super to call the parent method, inside the body of the child method.

Chủ Đề