آموزش کامل اینترفیس (Interface) در PHP به زبان ساده
مقدمه؛ چرا به اینترفیسها در PHP نیاز داریم؟
در دنیای واقعی، قراردادها تضمین میکنند که طرفین متعهد به انجام وظایف خاصی هستند، بدون اینکه نیاز باشد بدانیم هر شخص چگونه کارش را انجام میدهد. در برنامه نویسی شیء گرا (OOP)، اینترفیس (Interface) دقیقاً همین نقش را بازی میکند. اینترفیس یک ساختار است که متدهایی را تعریف میکند که یک کلاس «باید» آنها را پیادهسازی کند.
اینترفیسها به ما کمک میکنند تا کدهایی با انعطافپذیری بالا، قابلیت تست آسانتر و وابستگی بسیار کمتر (Loose Coupling) بنویسیم. در این مقاله به صورت کاملاً عملی یاد میگیرید که چطور از اینترفیسها در پروژههای PHP خود استفاده کنید.
اینترفیس (Interface) چیست؟
یک اینترفیس مانند یک قالب خالی یا یک نقشه راه است. در اینترفیس شما فقط نام متدها، پارامترهای ورودی و نوع بازگشتی آنها را مشخص میکنید و هیچ کدی برای بدنه متدها نمینویسید.
برای تعریف اینترفیس در PHP از کلمه کلیدی interface استفاده میشود:
interface PaymentGatewayInterface {
public function pay(float $amount): string;
public function refund(float $amount): bool;
}
نکات کلیدی در مورد ویژگیهای اینترفیس:
- تمامی متدهای تعریف شده در یک اینترفیس باید به صورت
publicباشند. - متدها نباید بدنه (بدنه همان کدهای بین
{}است) داشته باشند. - کلاسها نمیتوانند از یک اینترفیس نمونهسازی (instantiate) کنند؛ یعنی نمیتوانید بنویسید
new PaymentGatewayInterface().
نحوه پیادهسازی (Implement) یک اینترفیس
وقتی یک کلاس تصمیم میگیرد از یک اینترفیس استفاده کند، باید از کلمه کلیدی implements استفاده کند. این کلاس موظف است تمام متدهای موجود در آن اینترفیس را دقیقاً با همان ساختار تعریف کند:
class PayPalGateway implements PaymentGatewayInterface {
public function pay(float $amount): string {
return "مبلغ $amount دلار با موفقیت از طریق درگاه PayPal پرداخت شد.";
}
public function refund(float $amount): bool {
// منطق برگشت وجه در پیپال
return true;
}
}
اگر کلاس شما حتی یکی از متدهای اینترفیس را پیادهسازی نکند، PHP یک Fatal Error صادر خواهد کرد. این ویژگی تضمین میکند که هر کلاسی که نام اینترفیس ما را یدک میکشد، حتماً رفتارهای مورد انتظار را دارا است.
پیادهسازی چندگانه (Multiple Interfaces)
یکی از بزرگترین مزیتهای اینترفیس نسبت به کلاسهای انتزاعی (Abstract Classes)، قابلیت ارثبری چندگانه است. یک کلاس در PHP تنها میتواند از یک کلاس دیگر ارثبری کند (Single Inheritance)، اما میتواند بینهایت اینترفیس را به صورت همزمان پیادهسازی کند:
interface LoggableInterface {
public function log(string $message): void;
}
class StripeGateway implements PaymentGatewayInterface, LoggableInterface {
public function pay(float $amount): string {
$this->log("پرداخت در حال انجام است");
return "پرداخت $amount از طریق Stripe انجام شد.";
}
public function refund(float $amount): bool {
return true;
}
public function log(string $message): void {
echo "[Log]: " . $message;
}
}
تفاوتهای اساسی بین Interface و Abstract Class
بسیاری از برنامهنویسان تازه کار تفاوت این دو مفهوم را به درستی متوجه نمیشوند. در جدول زیر تفاوتهای اصلی آنها ذکر شده است:
| ویژگی | Interface (واسط) | Abstract Class (کلاس انتزاعی) |
|---|---|---|
| بدنه متدها | به هیچ وجه نمیتواند بدنه داشته باشد. | میتواند هم متدهای با بدنه و هم متدهای بدون بدنه داشته باشد. |
| سطح دسترسی متدها | فقط باید public باشند. | میتوانند public یا protected باشند. |
| متغیرها (Properties) | نمیتواند حاوی پراپرتی باشد (فقط ثابتها یا constants). | میتواند متغیرهای معمولی در سطوح دسترسی مختلف داشته باشد. |
| تعداد پیادهسازی | یک کلاس میتواند چندین اینترفیس را implement کند. | یک کلاس فقط میتواند از یک کلاس abstract ارثبری (extends) کند. |
چرا از اینترفیس استفاده کنیم؟ (اصل Polymorphism)
مهمترین دلیل استفاده از اینترفیسها، چندریختی (Polymorphism) است. فرض کنید کلاسی برای مدیریت سفارشات دارید. این کلاس نباید درگیر جزئیات درگاه پرداخت شود؛ بلکه فقط کافیست با متد pay() کار کند، فرقی ندارد درگاه پیپال باشد یا استرایپ یا زرینپال:
class OrderProcessor {
private PaymentGatewayInterface $gateway;
// وابستگی ما به اینترفیس است، نه به یک درگاه خاص!
public function __construct(PaymentGatewayInterface $gateway) {
$this->gateway = $gateway;
}
public function process(float $amount) {
echo $this->gateway->pay($amount);
}
}
// حال به راحتی میتوانیم درگاه را تغییر دهیم بدون تغییر در کدهای کلاس پردازشگر:
$paypal = new PayPalGateway();
$processor = new OrderProcessor($paypal);
$processor->process(250);
نتیجهگیری
اینترفیسها سنگ بنای کدهای اصولی و قابل توسعه هستند. با تعریف دقیق اینترفیسها در پروژههای بزرگ PHP، شما میتوانید کارهای تیمی را سرعت ببخشید؛ چرا که برنامه نویسان روی ساختار و متدهای استاندارد توافق میکنند و هر کس میتواند بدون تداخل با بخشهای دیگر، کلاس مورد نظر خود را طراحی و پیادهسازی کند.
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید