آموزش interface در PHP : اینترفیس چیست و چگونه تعریف می‌شود؟

ساخت وبلاگ
<a href='/last-search/?q=آموزش'>آموزش</a> interface در PHP : <a href='/last-search/?q=تعریف'>تعریف</a> و استفاده

در این آموزش با مفهوم interface در PHP آشنا می‌شویم. رابط یا اینترفیس برای ما مشخص می‌کند که یک کلاس خاص باید چه متدهایی را داشته باشد. در حین آموزش کدهای یک مثال واقعی را با هم پیش می‌بریم تا درک بهتری از موضوع پیدا کنید.

در آموزش اصول برنامه نویسی شیء گرا مفهومی به نام چندریختی یا Polymorphism را معرفی کردم. اینطوری می‌توانستیم یک کلاس کلی را در اشکال مختلف اما با عملکردهای شبیه به هم داشته باشیم.

مثلاً مفهوم خودرو، یک انتزاعی است و به چیزهایی گفته می‌شود که چند چرخ، یک موتور و اجزای مشابهِ دیگری دارند. هر کدام از خودروها می‌توانند ویژگی‌های خاصی داشته باشند اما حتماً همگی روشن می‌شوند، راهنما می‌زنند، حرکت می‌کنند و … .

فهرست محتوای آموزش

interface در PHP چیست؟

بیایید بحث را وارد دنیای برنامه‌نویسی کنیم. فرض کنید می‌خواهیم در یک سیستم فروشگاهی چندین درگاه پرداخت مختلف را پیاده‌سازی کنیم؛ برای مثال درگاه‌های بانک ملت و سامان.

اگر تفکر شیءگرایی (Object Oriented) داشته باشیم، در نگاه اول سعی می‌کنیم دو کلاس برای درگاه‌های موردنظرمان ایجاد کنیم. این روش کاملاً درست و بدون مشکل است.

اما آیا قبول دارید که همهٔ درگاه‌ها، رفتارهای (methodهای) مشابهی دارند؟ مثلاً همگی کاربر را به سایت درگاه ارجاع می‌دهند، پس از برگشت از درگاه وضعیت پرداخت را چک می‌کنند و اطلاعات تراکنش را در دیتابیس ذخیره می‌کنند؟

اگر هر کدام از کلاس‌های ما برای این متدها، نام‌های متفاوتی داشته باشند، ایجاد تغییرات در کدها پیچیده شده و گاهی روند توسعه برنامه‌ها را مختل می‌کند!

اینترفیس (interface) مشابه یک سند است که برای برنامه‌نویس‌ها مشخص می‌کند کلاس‌هایی با هدف یکسان باید حاوی چه متدهایی باشند؟ به این صورت مطمئن هستیم کلاس‌های مدنظرمان از ساختاری یکسان تبعیت می‌کنند.

تعریف اینترفیس با کد PHP

برای تعریف interface می‌بایست یک فایل php با نام اینترفیس موردنظرمان ایجاد کنیم. اینجا PaymentInterface.php را ساخته و قطعه کد زیر را در آن قرار می‌دهم:

interface PaymentInterface { // an Empty Interface
}

برای تعریف، ابتدا کلمهٔ interface را نوشته و سپس نامش را می‌نویسیم. دقیقاً مشابه تعریف کلاس در PHP که در دو جلسه قبل با آن آشنا شدیم، با این تفاوت که به جای class از interface استفاده می‌کنیم.

حالا می‌خواهیم مشخص کنیم کلاس‌هایی که از این اینترفیس پیروی می‌کنند باید چه متدهایی را حتماً پیاده‌سازی کنند. برای این کار، مشابه تعریف method عمل می‌کنیم اما فقط تا قسمت تعریف آرگومان‌های ورودی تابع PHP پیش می‌رویم:

<?php
interface PaymentInterface { public function pay($uid, $oid); public function verify($payment_id, $oid); public function receipt($payment_id);
}

به این قسمت از یک متد (متد بدون بدنه) اصطلاحاً امضا یا شناسه متد نیز گفته می‌شود؛ چون هویتش (نام، ورودی و حتی نوع خروجی) را مشخص می‌کند.

در مثال بالا سه متد تعریف کرده‌ام:

  • متد pay که فرضاً id کاربر و سفارش را گرفته و پس از پردازش‌های لازم، کاربر را به درگاه منتقل می‌کند.
  • متد verify که برای تأیید وضعیت نهایی پرداخت (payment_id) و تطابق آن با مبلغ سفارش استفاده می‌شود. (oid شناسه سفارش است.)
  • انتظار داریم متد receipt نیز یک رشته متنی PHP به‌عنوان رسید پرداخت (مثلاً تاریخ و کد پیگیری) به ما نمایش دهد.

توجه کنید که نمی‌توانیم از interfaceها شیء ایجاد کنیم! یعنی در این مثال نوشتن new PayemtnInterface() اشتباه بوده و باعث ایجاد خطا می‌شود.

استفاده از interface

حالا برای استفاده از interface در php یک فایل دیگر برای تعریف کلاس درگاه موردنظرمان ایجاد می‌کنیم. برای اینکه مشخص کنیم یک کلاس قرار است از قرارداد اینترفیسِ خاصی پیروی کند، از کلمه implements استفاده می‌کنیم.

فایلی به نام MellatPayment.php ایجاد کرده و قطعه کد زیر را در آن قرار می‌دهم:

<?php
class MellatPayment implements PaymentInterface { // Class Body
}

می‌دانیم که می‌توانیم از یک کلاس خالی هم شیء جدید بسازیم. (هرچند کاربرد خاصی ندارد! سون لرن • آموزش...

ما را در سایت سون لرن • آموزش دنبال می کنید

برچسب : نویسنده : استخدام کار 7learn بازدید : 2774 تاريخ : شنبه 11 تير 1401 ساعت: 3:16

خبرنامه