0Pricing
PHP Academy · บทเรียน

การขยายคลาสด้วยการสืบทอด

ใช้ extends เพื่อสร้างลำดับชั้นของคลาสและเขียนทับเมธอด

การขยายคลาสด้วยการสืบทอด เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

บทนำ: การสืบทอดใน PHP

การสืบทอด ช่วยให้คลาสหนึ่ง (คลาสลูก) นำโค้ดของอีกคลาสหนึ่ง (คลาสแม่) กลับมาใช้และขยายเพิ่มเติมได้ โดยใช้คีย์เวิร์ด extends PHP รองรับการสืบทอดเดี่ยว

แนวคิดสำคัญ

แนวคิดสำคัญ:

  • คลาสลูกสืบทอดสมาชิกสาธารณะและสมาชิกที่ป้องกันไว้ทั้งหมด
  • เขียนทับเมธอดของคลาสแม่เพื่อเปลี่ยนพฤติกรรม
  • เรียกใช้เมธอดของคลาสแม่ด้วย parent::
  • ใช้ final เพื่อป้องกันการเขียนทับ

extends พื้นฐาน

ตัวอย่าง:

<?php
class Shape {
    public function __construct(protected string $color) {}
    public function describe(): string { return "A {$this->color} shape"; }
}

class Circle extends Shape {
    public function __construct(string $color, private float $radius) {
        parent::__construct($color);
    }
    public function area(): float { return M_PI * $this->radius ** 2; }
}

$c = new Circle('red', 5);
echo $c->describe();   // A red shape
echo round($c->area()); // 79

การเขียนทับเมธอด

ต่อไป:

<?php
class Logger {
    public function log(string $msg): void {
        echo "[LOG] $msg" . PHP_EOL;
    }
}

class DatabaseLogger extends Logger {
    public function log(string $msg): void {
        // Extend parent behavior
        parent::log($msg);
        // Also save to DB
        echo "[DB] Saved: $msg" . PHP_EOL;
    }
}

$l = new DatabaseLogger();
$l->log('User login');

คีย์เวิร์ด final

เจาะลึกเพิ่มเติม:

<?php
class PaymentProcessor {
    final public function processPayment(float $amount): void {
        // Critical logic — cannot be overridden
        $this->validate($amount);
        $this->charge($amount);
        $this->log($amount);
    }

    protected function validate(float $amount): void { /* ... */ }
    protected function charge(float $amount): void   { /* ... */ }
    protected function log(float $amount): void      { /* ... */ }
}

การตรวจสอบ instanceof

การใช้งานจริง:

<?php
class Vehicle {}
class Car extends Vehicle {}
class ElectricCar extends Car {}

$ev = new ElectricCar();

var_dump($ev instanceof ElectricCar); // true
var_dump($ev instanceof Car);         // true
var_dump($ev instanceof Vehicle);     // true

// Also works with interfaces
var_dump($ev instanceof Countable);   // false

คลาสแม่แบบ abstract

ขั้นสูง:

<?php
abstract class Notification {
    abstract public function send(string $message): bool;

    public function sendBatch(array $messages): void {
        foreach ($messages as $msg) {
            $this->send($msg);
        }
    }
}

class EmailNotification extends Notification {
    public function send(string $message): bool {
        echo "Email: $message" . PHP_EOL;
        return true;
    }
}

รูปแบบ

รูปแบบการสืบทอดใน PHP ที่พบบ่อยมักใช้เพื่อแก้ปัญหาด้านการออกแบบที่เกิดซ้ำอย่างเป็นระเบียบ ควรใช้อย่างสม่ำเสมอเพื่อให้โค้ดอ่านง่ายและดูแลรักษาได้

ควรใช้เมื่อใด

การรู้ว่าเมื่อใดควรใช้การสืบทอดใน PHP สำคัญพอ ๆ กับการรู้วิธีใช้ การใช้มากเกินไปทำให้ซับซ้อน ส่วนการใช้น้อยเกินไปทำให้เกิดโค้ดซ้ำ

ตัวอย่างจากการใช้งานจริง

ในแอปพลิเคชันจริง การสืบทอดใน PHP ปรากฏอยู่บ่อยครั้งในเฟรมเวิร์ก ระบบแมปวัตถุสัมพันธ์ และชั้นบริการ การทำความเข้าใจเรื่องนี้จะเตรียมความพร้อมให้คุณมีส่วนร่วมในโครงการ PHP ระดับมืออาชีพ

ข้อผิดพลาดที่พบบ่อย

หลีกเลี่ยงข้อผิดพลาดเหล่านี้เมื่อใช้การสืบทอดใน PHP:

  • เรียก parent::__construct() เสมอเพื่อเริ่มต้นสถานะของคลาสแม่
  • อย่าเขียนทับเมธอดเพียงเพื่อเรียกใช้เมธอดของคลาสแม่โดยไม่มีการเปลี่ยนแปลง
  • ใช้ final กับเมธอดที่สำคัญต่อความปลอดภัย
  • ควรใช้การประกอบอ็อบเจ็กต์แทนโครงสร้างการสืบทอดที่มีหลายชั้น

ตรวจสอบความเข้าใจอย่างรวดเร็ว

คีย์เวิร์ดใดป้องกันไม่ให้เมธอดถูกเขียนทับในคลาสย่อย

สรุป: การสืบทอดใน PHP

สรุป:

  • เรียก parent::__construct() เสมอเพื่อเริ่มต้นสถานะของคลาสแม่
  • อย่าเขียนทับเมธอดเพียงเพื่อเรียกใช้เมธอดของคลาสแม่โดยไม่มีการเปลี่ยนแปลง
  • ใช้ final กับเมธอดที่สำคัญต่อความปลอดภัย
  • ควรใช้การประกอบอ็อบเจ็กต์แทนโครงสร้างการสืบทอดที่มีหลายชั้น

คำถามที่พบบ่อย

บทเรียน “การขยายคลาสด้วยการสืบทอด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การขยายคลาสด้วยการสืบทอด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การขยายคลาสด้วยการสืบทอด”

ใช้ extends เพื่อสร้างลำดับชั้นของคลาสและเขียนทับเมธอด คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การขยายคลาสด้วยการสืบทอด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การขยายคลาสด้วยการสืบทอด
  2. คลาสและเมธอดนามธรรม
  3. การใช้งานอินเทอร์เฟซ
  4. Traits สำหรับการนำโค้ดกลับมาใช้ใหม่
← กลับไปที่ PHP Academy