در این آموزش با مفهوم interface در PHP آشنا میشویم. رابط یا اینترفیس برای ما مشخص میکند که یک کلاس خاص باید چه متدهایی را داشته باشد. در حین آموزش کدهای یک مثال واقعی را با هم پیش میبریم تا درک بهتری از موضوع پیدا کنید.
در آموزش اصول برنامه نویسی شیء گرا مفهومی به نام چندریختی یا Polymorphism را معرفی کردم. اینطوری میتوانستیم یک کلاس کلی را در اشکال مختلف اما با عملکردهای شبیه به هم داشته باشیم.
مثلاً مفهوم خودرو، یک انتزاعی است و به چیزهایی گفته میشود که چند چرخ، یک موتور و اجزای مشابهِ دیگری دارند. هر کدام از خودروها میتوانند ویژگیهای خاصی داشته باشند اما حتماً همگی روشن میشوند، راهنما میزنند، حرکت میکنند و … .
فهرست محتوای آموزش
بیایید بحث را وارد دنیای برنامهنویسی کنیم. فرض کنید میخواهیم در یک سیستم فروشگاهی چندین درگاه پرداخت مختلف را پیادهسازی کنیم؛ برای مثال درگاههای بانک ملت و سامان.
اگر تفکر شیءگرایی (Object Oriented) داشته باشیم، در نگاه اول سعی میکنیم دو کلاس برای درگاههای موردنظرمان ایجاد کنیم. این روش کاملاً درست و بدون مشکل است.
اما آیا قبول دارید که همهٔ درگاهها، رفتارهای (methodهای) مشابهی دارند؟ مثلاً همگی کاربر را به سایت درگاه ارجاع میدهند، پس از برگشت از درگاه وضعیت پرداخت را چک میکنند و اطلاعات تراکنش را در دیتابیس ذخیره میکنند؟
اگر هر کدام از کلاسهای ما برای این متدها، نامهای متفاوتی داشته باشند، ایجاد تغییرات در کدها پیچیده شده و گاهی روند توسعه برنامهها را مختل میکند!
اینترفیس (interface) مشابه یک سند است که برای برنامهنویسها مشخص میکند کلاسهایی با هدف یکسان باید حاوی چه متدهایی باشند؟ به این صورت مطمئن هستیم کلاسهای مدنظرمان از ساختاری یکسان تبعیت میکنند.
برای تعریف 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);
}
به این قسمت از یک متد (متد بدون بدنه) اصطلاحاً امضا یا شناسه متد نیز گفته میشود؛ چون هویتش (نام، ورودی و حتی نوع خروجی) را مشخص میکند.
در مثال بالا سه متد تعریف کردهام:
توجه کنید که نمیتوانیم از interfaceها شیء ایجاد کنیم! یعنی در این مثال نوشتن new PayemtnInterface()
اشتباه بوده و باعث ایجاد خطا میشود.
حالا برای استفاده از interface در php یک فایل دیگر برای تعریف کلاس درگاه موردنظرمان ایجاد میکنیم. برای اینکه مشخص کنیم یک کلاس قرار است از قرارداد اینترفیسِ خاصی پیروی کند، از کلمه implements استفاده میکنیم.
فایلی به نام MellatPayment.php
ایجاد کرده و قطعه کد زیر را در آن قرار میدهم:
<?php
class MellatPayment implements PaymentInterface { // Class Body
}
میدانیم که میتوانیم از یک کلاس خالی هم شیء جدید بسازیم. (هرچند کاربرد خاصی ندارد! سون لرن • آموزش...
برچسب : نویسنده : استخدام کار 7learn بازدید : 2774