Trait در PHP

منتشر شده در 15 دسامبر 2024 آخرین به روز رسانی در 15 دسامبر 2024
مهندس محسن حسن پور
114 0
Trait در PHP

این پست با مسیر متخصص php مرتبط است. مشاهده مسیر (Roadmap)

در زبان برنامه نویسی PHP به هنگام برنامه نویسی شی گرا ما قادر نخواهیم بود که از چند کلاس ارث بری کنیم. برای حل این مشکل Trait ها به کار می آیند. در ادامه بصورت کامل درباره ی Trait در PHP صحبت خواهیم کرد.

Trait چیست و پرا باید از Trait استفاده کنیم؟

در PHP یک کلاس نمیتواند از بیش از 1 کلاس ارث بری کند. راه حل این موضوع استفاده از trait ها است. با trait ها می توانیم چند عمل موازی را در trait ها قرار دهیم و سپس در کلاس ها از این trait ها استفاده کنیم.

نکته ی قابل تامل آن است که ما وقتی در یک کلاس از کلاس دیگری ارث بری میکنیم معمولا رابطه ی از بالا به پایین برقرار است. مثلا کلاسی داریم به نام Car و کلاس های Benz و BMW از کلاس Car ارث بری میکنند. در این حالات معمولا کلاس فرزند زیر مجموعه ای از کلاس والد است. اما در trait ها روابط می توانند هم از بالا به پایین باشند هم حتی هیچ ربطی به هم نداشته باشند. برای مثال ما میتوانیم عمل لاگ کردن را در یک trait تعریف کنیم و در کلاس ها از این عمل استفاده کنیم.

نحوه تعریف trait در PHP

به عمل استفاده از trait در یک کلاس اصطلاحا use کردن trait گفته می شود. عمل use کردن در یک کلاس باید در ابتدای کلاس انجام شود. برای use کردن trait در PHP بصورت زیر عمل میکنیم:

trait message {
  public function msg1() {
    echo "Hello World!";
  }
}

class Welcome {
  use message;
}

نحوه ی استفاده از چند Trait در یک کلاس

trait message1 {
  public function msg1() {
    echo "Hello World!";
  }
}

trait message2 {
  public function msg2() {
    echo "OOP is awesome!";
  }
}

class Welcome {
  use message1, message2;
}

بعد از این ما با عملگر $this هم به متد های message1 و هم متد های message2 دسترسی داریم.

تفاوت Trait با Interface در PHP

از نظر بنیادی و کارکرد تریت در PHP با Interface متفاوت است. در ادامه تفاوت Trait و interface را می بینیم:

ویژگی Trait Interface
هدف اصلی اشتراک‌گذاری کد بین چندین کلاس تعریف قراردادهایی که کلاس‌ها باید پیاده‌سازی کنند
ارث‌بری می‌تواند در چندین کلاس استفاده شود یک کلاس می‌تواند از چندین Interface پیروی کند
پیاده‌سازی متد متدها در Trait قابل پیاده‌سازی هستند متدها فقط تعریف می‌شوند و پیاده‌سازی ندارند
تعریف ویژگی (Property) امکان تعریف ویژگی دارد امکان تعریف ویژگی ندارد
تداخل متدها در صورت تداخل، کلاس تعیین می‌کند کدام متد استفاده شود متدهای تکراری باید جداگانه پیاده‌سازی شوند
نمونه‌سازی نمی‌توان از Trait مستقیماً نمونه ساخت نمی‌توان از Interface مستقیماً نمونه ساخت

تفاوت Trait با Class در PHP

ویژگی Trait Class
هدف اصلی اشتراک‌گذاری کد بین چندین کلاس ایجاد اشیاء و تعریف ویژگی‌ها و رفتارهای خاص
ارث‌بری می‌تواند در چندین کلاس استفاده شود یک کلاس می‌تواند تنها از یک کلاس ارث‌بری کند
پیاده‌سازی متد متدها در Trait قابل پیاده‌سازی هستند متدها در کلاس ها هم قابل پیاده‌سازی هستند
تعریف ویژگی (Property) امکان تعریف Property دارد امکان تعریف Property دارد
تداخل متدها در صورت تداخل، کلاس تعیین می‌کند کدام متد استفاده شود متدها در ارث‌بری از یک کلاس به صورت یکتا هستند
نمونه‌سازی نمی‌توان از Trait مستقیماً نمونه ساخت می‌توان از کلاس مستقیماً نمونه‌سازی کرد

 

امیدواریم در این آموزش بطور کامل با trait در PHP آشنا ده باشید. در انتها از شما دعوت می شود کانال یوتیوب تاتژن را دنبال کنید و از جدیدترین ویدئو های آموزشی بهره مند شوید.