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

คลาสและเมธอดนามธรรม

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

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

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