آموزش رایگان PHP

آموزش کامل اینترفیس (Interface) در PHP به زبان ساده

1405/07/28 22:23 محراب حسن زاده
آموزش کامل اینترفیس (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، شما می‌توانید کارهای تیمی را سرعت ببخشید؛ چرا که برنامه نویسان روی ساختار و متدهای استاندارد توافق می‌کنند و هر کس می‌تواند بدون تداخل با بخش‌های دیگر، کلاس مورد نظر خود را طراحی و پیاده‌سازی کند.


پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش جامع سطح دسترسی (Access Modifiers): تفاوت public، private و protected
1405/07/28 22:15

آموزش جامع سطح دسترسی (Access Modifiers): تفاوت public، private و protected

مطالعه بیشتر
استفاده از visibility و opacity در CSS برای مخفی‌سازی عناصر: راهنمای کامل و کاربردی
1403/08/11 20:31

استفاده از visibility و opacity در CSS برای مخفی‌سازی عناصر: راهنمای کامل و کاربردی

مطالعه بیشتر
مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثال‌ها
1403/07/30 20:38

مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثال‌ها

مطالعه بیشتر
آموزش ساختار استاندارد و بهینه پروژه PHP به سبک گوگل
1405/05/04 23:25

آموزش ساختار استاندارد و بهینه پروژه PHP به سبک گوگل

مطالعه بیشتر
آموزش مدیریت Box Model و ترکیب اجزای آن با CSS: کنترل دقیق فاصله‌ها و ابعاد عناصر
1402/06/05 23:30

آموزش مدیریت Box Model و ترکیب اجزای آن با CSS: کنترل دقیق فاصله‌ها و ابعاد عناصر

مطالعه بیشتر
آموزش کامل ثابت‌ها در PHP: تفاوت عمیق define و const طبق استانداردهای گوگل
1405/03/24 01:10

آموزش کامل ثابت‌ها در PHP: تفاوت عمیق define و const طبق استانداردهای گوگل

مطالعه بیشتر
آموزش کامل و اصولی اتصال PHP به پایگاه داده MySQL (به روش PDO و MySQLi)
1405/05/04 23:34

آموزش کامل و اصولی اتصال PHP به پایگاه داده MySQL (به روش PDO و MySQLi)

مطالعه بیشتر
آموزش جامع اعتبارسنجی حجم و نوع فایل آپلودی در PHP طبق استانداردهای امنیتی گوگل
1405/05/01 20:20

آموزش جامع اعتبارسنجی حجم و نوع فایل آپلودی در PHP طبق استانداردهای امنیتی گوگل

مطالعه بیشتر
مقدمه‌ای به رویدادها و دستورات در Vue.js: نحوه مدیریت و استفاده از v-on
1402/06/28 23:53

مقدمه‌ای به رویدادها و دستورات در Vue.js: نحوه مدیریت و استفاده از v-on

مطالعه بیشتر
تفاوت Session و Cookie در PHP؛ راهنمای جامع و کاربردی طبق استاندارد گوگل
1405/05/01 20:14

تفاوت Session و Cookie در PHP؛ راهنمای جامع و کاربردی طبق استاندارد گوگل

مطالعه بیشتر
آموزش جامع عملگرهای مقایسه‌ای در PHP؛ بررسی تفاوت == و ===
1405/04/03 23:47

آموزش جامع عملگرهای مقایسه‌ای در PHP؛ بررسی تفاوت == و ===

مطالعه بیشتر
مدیریت رویدادها در جاوا اسکریپت: اضافه و حذف Event Listeners - آموزش جامع با مثال‌ها
1403/08/02 21:31

مدیریت رویدادها در جاوا اسکریپت: اضافه و حذف Event Listeners - آموزش جامع با مثال‌ها

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد