PHP Inheritance

ในเนื้อหาส่วนนี้จะพูดถึงเรื่อง การสืบทอดคุณสมบัติ (Properties) และ วิธีการ (Method) โดยใช้ extends  ซึ่งคลาสย่อยจะสืบทอดหรือได้รับคุณสมบัติและวิธีการที่เป็น public และ protected จากคลาสแม่ 

ตัวอย่างที่ 1 การสืบทอด (Inheritance)

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color; 
  }
  protected function intro() {
    echo "ชื่อผลไม้ {$this->name} และสีของผลไม้ {$this->color}."; 
  }
}

class Strawberry extends Fruit {
  public function message() {
    echo "ผลไม้! <br>";
    
    $this -> intro();
  }
}
$strawberry = new Strawberry("Strawberry", "red");  
$strawberry->message(); 
?>

ไฟล์ที่ 1 inheritance.php

อธิบายไฟล์ที่ 1 

  • สร้างคลาสผลไม้ ที่ประกอบไปด้วย คุณสมบัติ ชื่อและสี + วิธีการ (Method) กำหนดชื่อและสี , แสดงผล
  • สร้างคลาสย่อยที่รับการสืบทอดจากคลาสผลไม้ ที่ประกอบไปด้วยเมธอด message() ที่ภายในใช้ในการแสดงผลคำว่า “ผลไม้!” และเข้าถึงเมธอด intro() ของคลาสผลไม้

 

การลบล้างคุณสมบัติ (Properties) และ วิธีการ (Method) ที่ได้รับสืบทอดมา

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color; 
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}."; 
  }
}

class Strawberry extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight; 
  }
  public function intro() {
    echo "The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} gram."; 
  }
}

$strawberry = new Strawberry("Strawberry", "red", 50);
$strawberry->intro();
?>

ไฟล์ที่ 2 ลบล้างสิ่งที่สืบทอด

อธิบายไฟล์ที่ 2 ง่ายๆ คือ คลาสย่อยที่ไดรับการสืบทอดจากคลาสแม่ทำการสร้าง วิธีการ (Method) หรือ คุณสมบัติ (Properties) ที่ชื่อเดียวกันกับคลาสแม่ ซึ่งจะส่งผลให้เกิด Overwrite หรือเขียนทับนั่นเอง ดังนั้นจึงเรียกวิธีนี้ว่าการลบล้างสิ่งที่สืบทอด 

 

คียเวิร์ด final สามารถนำมาใช้เพื่ป้องกันการลบล้าง เพื่อไม่ให้คลาสย่อยเหนือกว่านั่นเอง

ตัวอย่างเช่น 

<?php
class Fruit {
  final public function intro() {
  }
}

class Strawberry extends Fruit {
  public function intro() {
  }
}
?>

ไฟล์ที่ 3 final ป้องกันการลบล้าง

จากไฟล์ที่ 3 บรรทัดที่ 3 มีการใช้คีย์เวิร์ด final ก่อนสร้างฟังก์ชัน intro() ทำให้เกิดข้อผิดพลาดขึ้น หากคลาสย่อยที่รับสืบทอดไปทำการ overwrite

 

หากคุณพบคำที่สะกดผิด เว้นวรรคไม่ถูกต้อง ฯ โปรดแจ้งให้เราทราบ โดยลากคลุม (highlight) ข้อความนั้น แล้วกด Ctrl + Enter

ไม่สามารถคัดลอกเนื้อหานี้

Spelling error report

The following text will be sent to our editors: