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

การใช้งานอินเทอร์เฟซ

กำหนดสัญญาด้วย interface และนำไปใช้ในหลายคลาส

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

บทนำ: อินเทอร์เฟซของ PHP

อินเทอร์เฟซ กำหนดสัญญา ซึ่งเป็นรายการลายเซ็นของเมธอดที่คลาสซึ่งนำไปใช้ต้องจัดเตรียมให้ ต่างจากคลาส abstract ตรงที่คลาสหนึ่งสามารถนำไปใช้งานกับอินเทอร์เฟซหลายรายการได้

แนวคิดสำคัญ

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

  • ประกาศด้วย interface Name {}
  • เมธอดไม่มีเนื้อหา มีเพียงลายเซ็นเท่านั้น
  • นำไปใช้ด้วย implements InterfaceName
  • คลาสหนึ่งสามารถนำไปใช้งานกับอินเทอร์เฟซหลายรายการได้

การกำหนดอินเทอร์เฟซ

ตัวอย่าง:

<?php
interface Serializable {
    public function serialize(): string;
    public function unserialize(string $data): void;
}

interface Loggable {
    public function toLog(): string;
}

// Implementing both interfaces:
class Event implements Serializable, Loggable {
    public function __construct(private string $type, private string $data) {}
    public function serialize(): string { return json_encode(['type'=>$this->type,'data'=>$this->data]); }
    public function unserialize(string $d): void { $a = json_decode($d,true); $this->type=$a['type']; $this->data=$a['data']; }
    public function toLog(): string { return "[{$this->type}] {$this->data}"; }
}

อินเทอร์เฟซในฐานะชนิดข้อมูล

ต่อไป:

<?php
interface Cache {
    public function get(string $key): mixed;
    public function set(string $key, mixed $val, int $ttl = 0): void;
    public function delete(string $key): void;
}

// Function accepts any Cache implementation:
function loadUser(int $id, Cache $cache): array {
    $key = "user:$id";
    $user = $cache->get($key);
    if (!$user) {
        $user = fetchFromDb($id);
        $cache->set($key, $user, 3600);
    }
    return $user;
}

ค่าคงที่ของอินเทอร์เฟซ

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

<?php
interface HttpMethods {
    const GET    = 'GET';
    const POST   = 'POST';
    const PUT    = 'PUT';
    const DELETE = 'DELETE';
}

class Router implements HttpMethods {
    public function addRoute(string $method, string $path, callable $handler): void {
        // ...
    }
}

$router = new Router();
$router->addRoute(HttpMethods::GET, '/users', fn() => []);

อินเทอร์เฟซที่ขยายจากอินเทอร์เฟซอื่น

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

<?php
interface Readable {
    public function read(): string;
}

interface Writable {
    public function write(string $data): void;
}

// Interface can extend multiple interfaces:
interface ReadWrite extends Readable, Writable {
    public function seek(int $position): void;
}

class FileStream implements ReadWrite {
    public function read(): string    { return ''; }
    public function write(string $d): void { }
    public function seek(int $p): void { }
}

การฉีดการพึ่งพาด้วยอินเทอร์เฟซ

ขั้นสูง:

<?php
interface MailerInterface {
    public function send(string $to, string $subject, string $body): bool;
}

class SmtpMailer implements MailerInterface {
    public function send(string $to, string $subject, string $body): bool {
        // real SMTP send
        return true;
    }
}

class UserService {
    public function __construct(private MailerInterface $mailer) {}

    public function register(string $email): void {
        // save user...
        $this->mailer->send($email, 'Welcome!', 'Thanks for joining.');
    }
}

รูปแบบ

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

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

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

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

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

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

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

  • คลาสสามารถนำไปใช้งานกับอินเทอร์เฟซหลายรายการได้ แต่ขยายได้เพียงคลาสเดียว
  • อินเทอร์เฟซไม่สามารถมีพร็อพเพอร์ตีหรือเนื้อหาของเมธอดได้ ยกเว้นค่าเริ่มต้นใน PHP 8
  • ควรเขียนโปรแกรมโดยอิงอินเทอร์เฟซ (ชนิดข้อมูลนามธรรม) ไม่ใช่การใช้งานจริง
  • ใช้อินเทอร์เฟซเพื่อรองรับการฉีดการพึ่งพาและการจำลองในการทดสอบ

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

คลาส PHP หนึ่งคลาสสามารถนำไปใช้งานกับอินเทอร์เฟซพร้อมกันได้กี่รายการ

สรุป: อินเทอร์เฟซของ PHP

สรุป:

  • คลาสสามารถนำไปใช้งานกับอินเทอร์เฟซหลายรายการได้ แต่ขยายได้เพียงคลาสเดียว
  • อินเทอร์เฟซไม่สามารถมีพร็อพเพอร์ตีหรือเนื้อหาของเมธอดได้ ยกเว้นค่าเริ่มต้นใน PHP 8
  • ควรเขียนโปรแกรมโดยอิงอินเทอร์เฟซ (ชนิดข้อมูลนามธรรม) ไม่ใช่การใช้งานจริง
  • ใช้อินเทอร์เฟซเพื่อรองรับการฉีดการพึ่งพาและการจำลองในการทดสอบ

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

บทเรียน “การใช้งานอินเทอร์เฟซ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การใช้งานอินเทอร์เฟซ”

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

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

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

บทเรียน “การใช้งานอินเทอร์เฟซ” ใช้เวลานานแค่ไหน

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

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

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

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

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