คลาสและเมธอดนามธรรม
กำหนดคลาสพื้นฐานที่มีการใช้งานเพียงบางส่วนด้วยคีย์เวิร์ด abstract
คลาสและเมธอดนามธรรม เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
บทนำ: คลาส abstract
คลาส abstract ไม่สามารถสร้างอินสแตนซ์ได้โดยตรง แต่ทำหน้าที่เป็นแม่แบบ เมธอด abstract จะประกาศลายเซ็นโดยไม่มีการทำงานภายใน และคลาสย่อยต้องจัดเตรียมการทำงานให้เมธอดเหล่านั้น
แนวคิดสำคัญ
แนวคิดสำคัญ:
- ประกาศด้วย
abstract class - เมธอด abstract ไม่มีเนื้อหา:
abstract public function x(); - คลาสย่อยต้องใช้งานเมธอด abstract ทุกเมธอด
- สามารถมีทั้งเมธอด abstract และเมธอดที่มีการทำงานจริงได้
การกำหนดคลาส abstract
ตัวอย่าง:
<?php
abstract class Animal {
public function __construct(protected string $name) {}
// Must be implemented by each subclass
abstract public function sound(): string;
// Shared concrete method
public function introduce(): string {
return "I am {$this->name} and I say: " . $this->sound();
}
}การใช้งานเมธอด abstract
ต่อไป:
<?php
class Dog extends Animal {
public function sound(): string { return 'Woof'; }
}
class Cat extends Animal {
public function sound(): string { return 'Meow'; }
}
$animals = [new Dog('Rex'), new Cat('Whiskers')];
foreach ($animals as $a) {
echo $a->introduce() . PHP_EOL;
}
// I am Rex and I say: Woof
// I am Whiskers and I say: Meowรูปแบบเมธอดแม่แบบ
เจาะลึกเพิ่มเติม:
<?php
abstract class DataProcessor {
// Template method: defines the algorithm skeleton
final public function process(array $data): array {
$data = $this->validate($data);
$data = $this->transform($data);
return $this->format($data);
}
abstract protected function validate(array $data): array;
abstract protected function transform(array $data): array;
protected function format(array $data): array { return $data; }
}Abstract เทียบกับ Interface
การใช้งานจริง:
<?php
// Use abstract class when:
// - Subclasses share implementation code
// - You need constructor logic or state
// Use interface when:
// - Defining a contract (no implementation needed)
// - Multiple inheritance of type is needed
// A class can only extend ONE abstract class
// but can implement MULTIPLE interfacesการใช้งานบางส่วน
ขั้นสูง:
<?php
abstract class Repository {
// Concrete method available to all subclasses
protected function findById(int $id, string $table): array {
$stmt = $this->getDb()->prepare("SELECT * FROM $table WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
}
abstract protected function getDb(): PDO;
abstract public function find(int $id): array;
}รูปแบบ
รูปแบบคลาส abstract ใน PHP ที่พบบ่อยมักใช้เพื่อแก้ปัญหาด้านการออกแบบที่เกิดซ้ำอย่างเป็นระเบียบ ควรใช้อย่างสม่ำเสมอเพื่อให้โค้ดอ่านง่ายและดูแลรักษาได้
ควรใช้เมื่อใด
การรู้ว่าเมื่อใดควรใช้คลาส abstract สำคัญพอ ๆ กับการรู้วิธีใช้ การใช้มากเกินไปทำให้ซับซ้อน ส่วนการใช้น้อยเกินไปทำให้เกิดโค้ดซ้ำ
ตัวอย่างจากการใช้งานจริง
ในแอปพลิเคชันจริง คลาส abstract ปรากฏอยู่บ่อยครั้งในเฟรมเวิร์ก ระบบแมปวัตถุสัมพันธ์ และชั้นบริการ การทำความเข้าใจเรื่องนี้จะเตรียมความพร้อมให้คุณมีส่วนร่วมในโครงการ PHP ระดับมืออาชีพ
ข้อผิดพลาดที่พบบ่อย
หลีกเลี่ยงข้อผิดพลาดเหล่านี้เมื่อใช้คลาส abstract:
- ไม่สามารถสร้างอินสแตนซ์ของคลาส abstract ด้วย new ได้
- ต้องใช้งานเมธอด abstract ทุกเมธอดในคลาสย่อยที่เป็นคลาสจริง
- ใช้รูปแบบเมธอดแม่แบบเพื่อกำหนดโครงร่างของขั้นตอนวิธี
- คลาส abstract สามารถมีตัวสร้าง พร็อพเพอร์ตี และเมธอดที่มีการทำงานจริงได้
ตรวจสอบความเข้าใจอย่างรวดเร็ว
คุณสามารถสร้างอินสแตนซ์ของคลาส abstract โดยตรงด้วย 'new' ได้หรือไม่
สรุป: คลาส abstract
สรุป:
- ไม่สามารถสร้างอินสแตนซ์ของคลาส abstract ด้วย new ได้
- ต้องใช้งานเมธอด abstract ทุกเมธอดในคลาสย่อยที่เป็นคลาสจริง
- ใช้รูปแบบเมธอดแม่แบบเพื่อกำหนดโครงร่างของขั้นตอนวิธี
- คลาส abstract สามารถมีตัวสร้าง พร็อพเพอร์ตี และเมธอดที่มีการทำงานจริงได้
คำถามที่พบบ่อย
บทเรียน “คลาสและเมธอดนามธรรม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คลาสและเมธอดนามธรรม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คลาสและเมธอดนามธรรม”
กำหนดคลาสพื้นฐานที่มีการใช้งานเพียงบางส่วนด้วยคีย์เวิร์ด abstract คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “คลาสและเมธอดนามธรรม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ