OOP - Traits

از ویکی‌کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
Php-menu.png
موارد آموزشی
فرم‌ها در PHP
PHP پیشرفته
شیء گرایی در PHP
۱OOP چیست؟
۲کلاس‌ها و اشیاء
۳متد سازنده
۴متد نابودگر
۵مشخص کننده‌های دسترسی
۶ارث بری
۷ثابت‌های کلاس
۸کلاس‌های Abstract
۹Traits
۱۰متدهای Static
۱۱ویژگی‌های Static
پایگاه داده MySQL
XML در PHP
AJAX در PHP
مثال‌های PHP
مرجع PHP


Traitsها چی هستند؟

PHP تنها از ارث بری تکی پشتیبانی می‌کند: یک کلاس فرزند تنها می‌تواند از یک والد ارث بری کند. [۱]

بنابراین، اگر یک کلاس نیاز داشته باشد که چندین رفتار را به ارث ببرد باید چه کار کرد؟ مفهوم traits در OOP این مشکل را رفع می‌کند.

Traitsها برای تعریف متدهایی که می‌توان در چندین کلاس استفاده کرد استفاده می‌شوند. Traitsها می‌توانند متدها و متدهای abstract ای داشته باشند که می‌توان از آنها در چندین کلاس استفاده کرد، و متدها می‌توانند هر نوع مشخص کننده دسترسی (public , private، یا protected) داشته باشند.

Traitها با کلمه کلیدی trait تعریف می‌شود.

شیوه نوشتار

1 <?php
2 trait TraitName {
3   // some code...
4 }
5 ?>

برای استفاده از یک trait درون یک کلاس، از کلمه کلیدی use استفاده کنید:

شیوه نوشتار

1 <?php
2 class MyClass {
3   use TraitName;
4 }
5 ?>

بگذارید به یک مثال نگاهی بیندازیم:

مثال

 1 <?php
 2 trait message1 {
 3 public function msg1() {
 4     echo "OOP is fun! ";
 5   }
 6 }
 7 
 8 class Welcome {
 9   use message1;
10 }
11 
12 $obj = new Welcome();
13 $obj->msg1();
14 ?>


مشاهدهٔ نتیجه


توضیح مثال

در اینجا، ما یک trait تعریف کرده‌ایم: message1. سپس، ما یک کلاس ساخته‌ایم: Welcome. کلاس از trait استفاده می‌کند و تمامی متدهای درون trait درون کلاس در دسترس خواهند بود.

اگر سایر کلاس‌ها به تابع msg1() نیاز داشته باشند، تنها از trait message1 درون آن کلاسها استفاده کنید. این امر موجب کاهش تکرر کد می‌شود، زیرا که نیازی نیست که یک سری متد را دوباره و دوباره تعریف کنید.

بگذارید به یک مثال دیگر نگاهی بیندازیم:

مثال

 1 <?php
 2 trait message1 {
 3   public function msg1() {
 4     echo "OOP is fun! ";
 5   }
 6 }
 7 
 8 trait message2 {
 9   public function msg2() {
10     echo "OOP reduces code duplication!";
11   }
12 }
13 
14 class Welcome {
15   use message1;
16 }
17 
18 class Welcome2 {
19   use message1, message2;
20 }
21 
22 $obj = new Welcome();
23 $obj->msg1();
24 echo "<br>";
25 
26 $obj2 = new Welcome2();
27 $obj2->msg1();
28 $obj2->msg2();
29 ?>


مشاهدهٔ نتیجه


توضیح مثال

در اینجا، ما دو trait تعریف کرده‌ایم: message1 و message2. سپس، ما دو کلاس ساخته‌ایم: welcome و welcome2. کلاس اول (welcome) از trait message1 استفاده می‌کند، و کلاس دوم (welcome2) از هر دو trait message1 و message2 استفاده می‌کند (چندین trait به وسیله ویرگول , از یکدیگر جدا می‌شوند).


منابع آموزشی