درphp در تعريف كلاس با امكانextends فقط از يك كلاس والد ميتوان استفاده كرد. بعبارتي كلاس اولاد باين فرمت از يك كلاس فقط ميتواند ارث ببرد.
اما براي حل مشكل كه بتواند، يك كلاس از چندين منبع رفتار بارث ببرد، امكان traitرا پيش بيني كرده است. traitبراي تعريف متدهائيكه در جندين كلاس استفاده ميشوند، كاربرد دارد.باآن ،متد يا متدانتزاعي ميتوان تعريف نمود،كه در كلاسهاي مختلف بتواند استفاده شود .متد ها ميتوانند داراي اصلاح كننده هايpublc,private,protected باشند.
نحوي تعريف الگوياTrait مطابق زير :
<?php trait TraitName { // some code... } ?>
نحوي استفاده الگو در يك كلاس با كلمه كليديuse ميباشد.نحوي كلي مطابق زيراست.
<?php class MyClass { use TraitName; } ?>
مثال ـ به مثال زير توجه كنيد:
<?php trait message1 { public function msg1() { echo "OOP is fun! "; } } class Welcome { use message1; } $obj = new Welcome(); $obj->msg1(); ?>
تشريح مثال ـ در اينجا الگوئي بانامmessage1 تعريف شده وبدنبال كلاسwelcome ايجاد وازآن الگودر ايجاد كلاس استفاده كرده است .در اين حالت متد الگو قابل دسترسي در كلاس ميباشد.
اگر در كلاس ديگري تابعmsg1( ) مورد نياز باشد، بسادگي ميتواند الگوي
message1درآن كلاس از طريق
مثال ـ در اين مثال نمونه استفاده از چند الگو در يك كلاس نشان داده شده است.
<?php trait message1 { public function msg1() { echo "OOP is fun! "; } } trait message2 { public function msg2() { echo "OOP reduces code duplication!"; } } class Welcome { use message1; } class Welcome2 { use message1, message2; } $obj = new Welcome(); $obj->msg1(); echo "<br>"; $obj2 = new Welcome2(); $obj2->msg1(); $obj2->msg2(); ?>
تشريح مثال ـ در اينجا دوالگويmessage1 وmessage2 تعريف وسپس در كلاسهايWelcom1 و
Welcom2استفاده شده اند .در welcom1 الگوي message1 و در welcom2 هردو الگو فعال اند .
در كلاسwelcom2 دو الگو بصورت