Lớp cha và lớp con 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 " . $this -> model . "
";   } }     //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[] . ' ' . $this -> style . '';
  }
}
 
 
//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ố 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 " . $this -> model . "
";   } }   //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 " . $this -> model . "
";   } }   //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

Lớp cha và lớp con là gì?

Lớp cha là lớp được kế thừa từ đó, còn được gọi là lớp cơ sở. Lớp con là lớp kế thừa từ lớp khác hay còn gọi là lớp dẫn xuất .

Lớp cha trong PHP là gì?

cha mẹ. là tên đặc biệt của lớp cha khi được sử dụng trong hàm thành viên . Để sử dụng cha gọi phương thức khởi tạo của lớp cha để khởi tạo lớp cha để đối tượng kế thừa lớp gán để đặt tên. GHI CHÚ. PHP không chấp nhận cha mẹ là tên của hàm.

Lớp cha được gọi là gì?

A lớp cơ sở còn được gọi là lớp cha hoặc lớp cha. Lớp có nguồn gốc. Một lớp được tạo từ một lớp hiện có. Lớp dẫn xuất kế thừa tất cả các thành viên và hàm thành viên của lớp cơ sở.

Lớp cha trong OOP là gì?

Lớp có thuộc tính và phương thức được kế thừa được gọi là lớp Cha. Và lớp kế thừa các thuộc tính từ lớp cha là lớp Con. Điều thú vị là, cùng với các thuộc tính và phương thức kế thừa, một lớp con có thể có các thuộc tính và phương thức riêng của nó.

Chủ Đề