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