Hướng dẫn how do you override a parent class in php? - làm thế nào để bạn ghi đè một lớp cha trong php?

Vấn đề là bạn đang cố gắng làm điều gì đó theo cách mà nó hoàn toàn không phải là phải thực hiện. Có một chút khó khăn để nói những gì bạn đang cố gắng làm nhưng hy vọng nếu bạn nhìn vào mẫu của tôi, nó sẽ cho bạn thấy những gì đang xảy ra:

<?php

class BaseClass {
    /* If a property is public or protected it can be overriden in derived classes.
     * If you had made it private it wouldn't be changable in derived classes. 
     * If you make it also make it static then there is only one copy of it shared 
     * by all instances of the class (as well as those derived from it). */
    protected $option=array();

    public function __construct() {
        $this->option=array(1,2,3);
        /* We are in the base class so the reset() method doesn't exist yet.
         * This fails in this class: */
        // $this->reset();
    }
    /** Print the $option variable. */
    public function dump() {
        echo sprintf('<pre><b>%s</b> = ', get_class($this));
        print_r($this->option);
        echo "</pre>\n";
    }
}

class DerivedClass extends BaseClass {
    public function __construct() {
        parent::__construct();
        /* We have complete control over the variable BaseClass::$option from this class.
         * If we want to we can even make it a string instead of an array. */
        $this->option="I've overridden the option property.";
    }
    /** Reset the BaseClass::$option variable. */
    public function reset() {
        $this->option=array(1,2,3,4);
    }
}

/// Create a few test objects to play with
$objBase=new BaseClass();
$objDerived=new DerivedClass();

$objBase->dump(); // Display the base object data

/// If BaseClass::$option is public you can edit it directly here.
/// This may be easier but it is discouraged because it breaks OOP principals.
//$objDerived->option[]=5;

$objDerived->dump(); // Display the derived object data

$objDerived->reset(); // call a method which will change our data
$objDerived->dump(); // Display the derived object data again now

Các lớp đưa ra nhiều cách để kiểm soát hơn nữa những gì có thể được nhìn thấy bởi các lớp đó có nguồn gốc từ lớp hiện tại và bên ngoài. Điều này được thực hiện bằng cách sử dụng các từ khóa công khai, được bảo vệ và riêng tư. Khi được đặt thành công khai, các phương thức và thuộc tính có thể nhìn thấy cho mọi thứ nhưng chúng vẫn có thể nằm ngoài phạm vi. Nói tóm lại, vấn đề duy nhất bạn gặp phải là phương pháp B: AA () của bạn đã nằm ngoài phạm vi trong A :: BB ().

Hãy nhớ rằng trong thực tế Baseclass có thể không nằm trong cùng một tệp như DerivingClass và một số dự án có thể không cần DerivingClass. Nếu bạn ghi nhớ điều đó, điều đó có ý nghĩa rằng bạn không thể sử dụng các phương thức thậm chí không được tải vào dự án.

Trong mã của bạn, bạn đang thực hiện một ví dụ hoàn toàn mới của B trong phương thức A :: BB (). Đây là một mẫu thiết kế mà bạn gần như sẽ không bao giờ thấy ngoại trừ trong một vài loại chức năng cụ thể (được gọi là chức năng nhà máy vì chúng có nghĩa là để tạo các lớp có nguồn gốc từ trong một lớp cơ sở có mục đích). Tôi khá chắc chắn rằng đó không phải là những gì bạn đang làm ở đây vì đó không phải là điều bạn làm trong PHP rất thường xuyên vì PHP thường không đọc dữ liệu lớp nhị phân từ các tệp và trong các tình huống khác thường có những cách tốt hơn để hoàn thành công việc.

Phương thức ghi đè trong PHP

Trong bối cảnh của phương thức lập trình theo định hướng đối tượng có nghĩa là thay thế phương thức cha mẹ trong lớp con. Trong quá trình ghi đè, chúng ta có thể khai báo lại phương thức lớp cha trong lớp con. Vì vậy, về cơ bản mục đích của việc ghi đè là thay đổi hành vi của phương pháp lớp cha của bạn.

Khi lớp của bạn có một số phương thức và một lớp khác (lớp dẫn xuất) muốn cùng một phương thức với hành vi khác nhau sau đó sử dụng ghi đè, bạn có thể thay đổi hoàn toàn hành vi của lớp cơ sở (hoặc lớp cha). Hai phương thức có cùng tên và cùng một tham số được gọi là ghi đè.parameter is called overriding.

Bối cảnh ghi đè không quá khó khăn trong PHP. Như chúng ta đều biết ghi đè trong PHP là một phương pháp cập nhật phương pháp được kế thừa từ lớp cha sang lớp con. Vì vậy, trong trường hợp này, bạn sẽ yêu cầu phương thức có cùng tên trong lớp cha cũng như trong lớp con và sau đó chúng ta sẽ thấy hành vi của phương pháp lớp cha được thay đổi như thế nào khi lớp con ghi đè phương thức của lớp cha.

Trong OOP PHP nếu chúng ta tạo ra một phương thức trong lớp con có cùng tên, cùng số lượng tham số và cùng một nhà xác định truy cập như trong cha mẹ của nó thì chúng ta có thể nói rằng chúng ta đang thực hiện việc ghi đè phương thức. Ví dụ:

class ParentClass {
public function test($param) {
return "\n Parent - the parameter value is $param";
}
}
class ChildClass extends ParentClass {
public function test($param) {
echo "\n Child - the parameter value is $param";
}
}
$objParentClass = new ParentClass;
$objChildClass = new ChildClass;
$objParentClass->test('class ParentClass');
$objChildClass->test('class ChildClass');

Định nghĩa của đa hình nói rằng, nếu quyết định gọi một phương pháp được thực hiện bằng cách kiểm tra đối tượng trong thời gian chạy thì đó là một trường hợp đa hình. Chúng tôi có thể áp dụng quy tắc này trong ví dụ của chúng tôi. Việc gọi phương thức kiểm tra () của lớp ParentClass hoặc Class ChildClass được quyết định bằng cách kiểm tra đối tượng liên quan đang thực hiện cuộc gọi đến phương thức. Do đó, cuộc gọi phương thức sẽ dựa trên đối tượng.

Làm thế nào chúng ta có thể gọi phương thức lớp cha trong việc ghi đè trong PHP?

lớp foo {$ text = "thế giới \ n"; kiểm tra chức năng được bảo vệ () {echo $ this-> văn bản; }} // class foo class thanh mở rộng foo {công khai chức năng kiểm tra () {echo "xin chào,"; // không thể sử dụng 'cha mẹ :: test ()' bởi vì, trong trường hợp này, // foo :: test () yêu cầu dữ liệu đối tượng từ $ này cha mẹ :: test (); }} // Thanh lớp mở rộng foo $ x = thanh mới; $ x- ...

Chúng ta có thể ghi đè phương thức lớp cha không?

Trong Java, phương thức ghi đè xảy ra khi lớp con (lớp con) có cùng phương thức với lớp cha. Nói cách khác, phương thức ghi đè xảy ra khi một lớp con cung cấp một triển khai cụ thể của một phương thức được khai báo bởi một trong các lớp cha của nó.method overriding occurs when a subclass (child class) has the same method as the parent class. In other words, method overriding occurs when a subclass provides a particular implementation of a method declared by one of its parent classes.

Làm thế nào tôi có thể ghi đè trong PHP?

Trong chức năng ghi đè, cả hai lớp cha và con nên có cùng tên hàm và số lượng đối số.Nó được sử dụng để thay thế phương pháp cha mẹ trong lớp con.Mục đích của việc ghi đè là thay đổi hành vi của phương pháp lớp cha.Hai phương thức có cùng tên và cùng một tham số được gọi là ghi đè.both parent and child classes should have same function name with and number of arguments. It is used to replace parent method in child class. The purpose of overriding is to change the behavior of parent class method. The two methods with the same name and same parameter is called overriding.

Chúng ta có thể ghi đè các thuộc tính trong PHP không?

Có thể ghi đè thuộc tính lớp cha từ lớp con không?Đúng.Yes.