Ghi đè thuộc tính trong php là gì?

Tính kế thừa cho phép chúng ta chỉ viết mã một lần trong lớp cha, sau đó sử dụng mã trong cả lớp cha và lớp con

Để khai báo rằng một lớp kế thừa mã từ một lớp khác, chúng tôi sử dụng từ khóa mở rộng. Hãy xem trường hợp tổng quát

class Parent {   // The parent’s class code }   class Child extends Parent {   // The child can use the parent's class code }

Lớp con có thể sử dụng tất cả các phương thức và thuộc tính không riêng tư mà nó kế thừa từ lớp cha. Điều này cho phép chúng ta chỉ viết mã một lần trong lớp cha, sau đó sử dụng nó trong cả lớp cha và lớp con

Trong ví dụ dưới đây, lớp SportsCar kế thừa lớp Car class, so it has access to all of the Car’s methods and properties that are not private. This allows us to write the setModel()hello() công khai .

//The parent class class Car {   // Private property inside the class   private $model;     //Public setter method   public function setModel($model)   {     $this -> model = $model;   }     public function hello()   {     return "beep! I am a <i>" . $this -> model . "</i><br />";   } }     //The child class inherits the code from the parent class class SportsCar extends Car {   //No code in the child class }     //Create an instance from the child class $sportsCar1 = new SportsCar();   // Set the value of the class’ property. // For this aim, we use a method that we created in the parent $sportsCar1 -> setModel('Mercedes Benz');   //Use another method that the child class inherited from the parent class echo $sportsCar1 -> hello();

Kết quả.
bíp. Tôi là một chiếc Mercedes Benz

Làm thế nào một lớp con có thể có các phương thức và thuộc tính riêng của nó?

Giống như một lớp con có thể sử dụng các thuộc tính và phương thức của lớp cha, nó cũng có thể có các thuộc tính và phương thức của riêng nó. Tuy nhiên, trong khi một lớp con có thể sử dụng mã được thừa hưởng từ lớp cha, thì lớp cha không được phép sử dụng mã của lớp con

Trong ví dụ dưới đây, chúng ta sẽ thêm vào lớp con một số mã của riêng nó bằng cách thêm thuộc tính $style cũng như . driveItWithStyle() method:

// The parent class has its properties and methods class Car {      //A private property or method can be used only by the parent.   private $model;      // Public methods and properties can be used by both the parent and the child classes.   public function setModel($model)   {     $this -> model = $model;   }      public function getModel()   {     return $this -> model;   } }     //The child class can use the code it inherited from the parent class, // and it can also have its own code class SportsCar extends Car{     private $style = 'fast and furious';     public function driveItWithStyle()   {     return 'Drive a ' . $this -> getModel() . ' <i>' . $this -> style . '</i>';   } }     //create an instance from the child class $sportsCar1 = new SportsCar();   // Use a method that the child class inherited from the parent class $sportsCar1 -> setModel('Ferrari');   // Use a method that was added to the child class echo $sportsCar1 -> driveItWithStyle();

Kết quả.
Lái chiếc Ferrari nhanh và dữ dội.

Công cụ sửa đổi kiểm soát truy cập được bảo vệ

Khi chúng ta khai báo một thuộc tính hoặc một phương thức là được bảo vệ, chúng ta có thể tiếp cận nó từ cả lớp cha và lớp con

Trong hướng dẫn trước, chúng ta đã học được rằng chúng ta có thể sử dụng công cụ sửa đổi truy cập công khai để cho phép truy cập vào các phương thức và thuộc tính của lớp từ cả bên trong và bên ngoài lớp. Chúng tôi cũng đã học được rằng những phương thức và thuộc tính riêng tư chỉ có thể được sử dụng từ bên trong lớp

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về một công cụ sửa đổi thứ ba - công cụ sửa đổi được bảo vệ, cho phép sử dụng mã từ cả bên trong lớp và từ các lớp con của nó

Ví dụ đầu tiên cho thấy điều gì có thể xảy ra khi chúng ta khai báo thuộc tính $model trong phần tử gốc là riêng tư, nhưng vẫn cố gắng truy cập thuộc tính đó từ .

Bạn nghĩ điều gì có thể xảy ra khi chúng ta cố gắng gọi một phương thức hoặc thuộc tính riêng từ bên ngoài lớp?

Đây là mã

// The parent class class Car {   //The $model property is private, thus it can be accessed   // only from inside the class   private $model;     //Public setter method   public function setModel($model)   {     $this -> model = $model;   } }     // The child class class SportsCar extends Car{   //Tries to get a private property that belongs to the parent   public function hello()   {     return "beep! I am a <i>" . $this -> model . "</i><br />";   } }   //Create an instance from the child class $sportsCar1 = new SportsCar();   //Set the class model name $sportsCar1 -> setModel('Mercedes Benz');   //Get the class model name echo $sportsCar1 -> hello();

Kết quả.
Thông báo. tài sản không xác định. Xe thể thao. $mô hình

Chúng tôi gặp lỗi vì phương thức hello() trong lớp con đang cố tiếp cận một thuộc tính riêng, $model, that belongs to the parent class.

Chúng ta có thể khắc phục sự cố bằng cách khai báo thuộc tính $model trong phần tử gốc là được bảo vệ, thay vì riêng tư, bởi vì khi chúng ta khai báo thuộc tính .

// The parent class class Car {   //The $model property is now protected, so it can be accessed   // from within the class and its child classes   protected $model;      //Public setter method   public function setModel($model)   {     $this -> model = $model;   } }   // The child class class SportsCar extends Car {   //Has no problem to get a protected property that belongs to the parent   public function hello()   {     return "beep! I am a <i>" . $this -> model . "</i><br />";   } }   //Create an instance from the child class $sportsCar1 = new SportsCar();   //Set the class model name $sportsCar1 -> setModel('Mercedes Benz');   //Get the class model name echo $sportsCar1 -> hello();

Kết quả.
bíp. Tôi là một chiếc Mercedes Benz

Bây giờ nó hoạt động, bởi vì chúng ta có thể truy cập mã được bảo vệ thuộc về cha mẹ từ lớp con

Làm cách nào để ghi đè các thuộc tính và phương thức của lớp cha trong lớp con?

Tương tự, lớp con có thể có các thuộc tính và phương thức riêng, nhưng nó có thể ghi đè lên các thuộc tính và phương thức của lớp cha. Khi chúng ta ghi đè các thuộc tính và phương thức của lớp, chúng ta viết lại một phương thức hoặc thuộc tính tồn tại trong cha một lần nữa trong lớp con, nhưng gán cho nó một giá trị hoặc mã khác

Trong ví dụ dưới đây, chúng ta tạo một phương thức hello() trong lớp cha để trả về chuỗi "beep" and override it in the child class with a method by the same name that returns a different string, "Halllo".

Đây là mã

// The parent class has hello method that returns "beep". class Car {   public function hello()   {     return "beep";   } }   //The child class has hello method that returns "Halllo" class SportsCar extends Car {   public function hello()   {     return "Hallo";   } }   //Create a new object $sportsCar1 = new SportsCar();   //Get the result of the hello method echo $sportsCar1 -> hello();

Kết quả.
Xin chào

Kết quả phản ánh thực tế là phương thức hello() từ lớp cha đã bị phương thức con có cùng tên ghi đè.

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

Để ngăn không cho phương thức trong lớp con ghi đè phương thức của lớp cha, chúng ta có thể đặt tiền tố cho phương thức trong lớp cha bằng từ khóa cuối cùng

Ghi đè trong PHP là gì?

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ó 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 đè.

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

Có thể ghi đè thuộc tính của lớp cha từ lớp con không? . Điều không thể thực hiện được là gọi $obj->aa(); . Yes. What is not possible is calling $obj->aa(); from $obj->bb(); because $obj->aa(); is defined in the child class.

Làm cách nào để ngăn ghi đè phương thức trong PHP?

Tránh ghi đè phương thức . using the keyword final infront of the method name prevents it from being overriden.

Các lớp con có thể ghi đè lên các thuộc tính của cha mẹ chúng không?

Giống như lớp con có thể có các thuộc tính và phương thức riêng, lớp con có thể ghi đè các thuộc tính và phương thức của lớp cha . Khi chúng ta ghi đè các thuộc tính và phương thức của lớp, chúng ta viết lại một phương thức hoặc thuộc tính tồn tại trong cha một lần nữa trong lớp con, nhưng gán cho nó một giá trị hoặc mã khác.

Chủ đề