การขยายคลาสด้วยการสืบทอด
ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การขยายคลาสด้วยการสืบทอด
- คลาสและเมธอดนามธรรม
- การใช้งานอินเทอร์เฟซ
- Traits สำหรับการนำโค้ดกลับมาใช้ใหม่