این پست با مسیر متخصص 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 آشنا ده باشید. در انتها از شما دعوت می شود کانال یوتیوب تاتژن را دنبال کنید و از جدیدترین ویدئو های آموزشی بهره مند شوید.