استفاده مجدد از کدها یا Trait در Php چیست و چگونه انجام می شود ؟ لطفا اگر ممکنه با ذکر مثال توضیح بدید. متشکرم
یکی از جنبه های مهم در برنامه نویسی شی گرا این می باشد که برنامه نویس بتواند از کدها و کلاسهایی که قبلا نوشته است مجددا استفاده کند. در PHP، برای استفاده مجدد از کدها ما می توانستیم در کلاس های مختلف، از ارث بری (inheritance) استفاده می کنیم. اما محدودیتهایی وجود داشت. این محدودیت این بود که یک کلاس فقط میتوانست از یک کلاس دیگر ارث بری کند.
خب اجازه بدید اول یک تعریف از Trait براتون بگم. میشه گفت trait یک روش ارث بری از کلاس هست، البته روش ارث بری قبلی هم وجود داره هنوز. Trait ها ابزارهایی در PHP هستند که می تونید با نوشتن اونها و ارث بری از آنها در کلاس های مختلف کد های reusable داشته باشیم و مجبور نباشیم توابع و متدهای خودمون رو چند بار بنویسیم.
در واقع اگر کلاسی داشته باشیم که نیاز داشته باشد از چندین کلاس دیگر ارث بری کند در اینجا می توانیم از Trait استفاده کنیم.
برای تعریف Trait در PHP از کلمه کلیدی "trait" استفاده می شود.
<?php
trait TraitName {
// some code...
}
?>
برای استفاده از Trait در یک کلاس هم به صورت زیر عمل می کنیم. برای این منظور از کلمه کلیدی "use" استفاده می کنیم.
<?php
class MyClass {
use TraitName;
}
?>
نکته : دقت کنید تعریف یک trait جدید در Php مانند تعریف یک کلاس جدید می باشد.
به مثال زیر که یک trait ایجاد کرده ایم و از آن استفاده کرده این دقت کنید :
<?php
trait message1 {
public function msg1() {
echo "OOP is fun! ";
}
}
class Welcome {
use message1;
}
$obj = new Welcome();
$obj->msg1();
?>
همانطور که مشاهده می کنید در مثال بالا در ابتدا یک trait به نام message1 ایجاد کرده ایم. این trait شامل یک متد به نام msg1 می باشد. خب در ادامه یک class به نام welcome تعریف شده است که یا استفاده از کلمه کلیدی "use" توانسته این trait با نام message1 را در این کلاس استفاده کنیم. در حال حاضر به همه متدهای این trait در کلاس welcome دسترسی داریم. در ادامه از این متد msg1 استفاده کرده ایم.
می توان چندین trait هم تعریف کرد و از همه در کلاس استفاده کرد. برای این منظور به مثال زیر توجه کنید.
<?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();
?>
در کدهای بالا دو trait به نام های message1 و message2 داریم. همچنین دو کلاس به نام های Welcome و Welcome2 داریم. در کلاس Welcome2 از هر دو trait استفاده شده است. به عبارتی در این کلاس هم به متدها و توابع message1 و هم به متدها و توابع message2 دسترسی داریم.
می توانیم دو یا چند trait داشته باشیم. سپس یک trait ایجاد کنیم که سایر trait در آن use شوند و در کلاس از همان یک trait استفاده شود.
<?php
trait t1 {
public function firstname() {
echo 'Ali';
}
}
trait t2{
public function Family() {
echo 'ramezani!';
}
}
trait myname{
use firstname, Famili;
}
class username {
use myname;
}
تاریخ :
1399/08/08
- ساعت :
04:01:00 PM
- بازدید :
2840
- پاسخ :
2
|
تاریخ :
1399/01/11
- ساعت :
02:02:00 PM
- بازدید :
3158
- پاسخ :
3
|
تاریخ :
1398/08/20
- ساعت :
02:43:00 AM
- بازدید :
6381
- پاسخ :
5
|
تاریخ :
1400/06/31
- ساعت :
07:15:00 AM
- بازدید :
3363
- پاسخ :
0
|
تاریخ :
1398/08/05
- ساعت :
03:29:00 AM
- بازدید :
6112
- پاسخ :
1
|
تاریخ :
1399/07/08
- ساعت :
04:50:00 PM
- بازدید :
3626
- پاسخ :
0
|
تاریخ :
1399/07/10
- ساعت :
01:11:00 AM
- بازدید :
2999
- پاسخ :
4
|
تاریخ :
1398/07/03
- ساعت :
06:50:00 PM
- بازدید :
3978
- پاسخ :
1
|
تاریخ :
1399/01/20
- ساعت :
03:18:00 PM
- بازدید :
3214
- پاسخ :
1
|
تاریخ :
1399/10/27
- ساعت :
01:47:00 AM
- بازدید :
3196
- پاسخ :
1
|
تاریخ :
1404/01/07
- ساعت :
05:02:00 AM
- بازدید :
89
- پاسخ :
1
|
تاریخ :
1402/04/28
- ساعت :
09:04:00 PM
- بازدید :
1313
- پاسخ :
0
|
تاریخ :
1403/12/30
- ساعت :
06:43:00 PM
- بازدید :
66
- پاسخ :
1
|
تاریخ :
1398/08/23
- ساعت :
09:16:00 PM
- بازدید :
9852
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
12:18:00 PM
- بازدید :
37
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
10:39:00 AM
- بازدید :
45
- پاسخ :
1
|
تاریخ :
1404/01/02
- ساعت :
05:05:00 PM
- بازدید :
59
- پاسخ :
1
|
تاریخ :
1403/12/30
- ساعت :
06:52:00 PM
- بازدید :
48
- پاسخ :
1
|
تاریخ :
1399/06/04
- ساعت :
02:25:00 PM
- بازدید :
4419
- پاسخ :
2
|
تاریخ :
1403/11/30
- ساعت :
10:36:00 AM
- بازدید :
202
- پاسخ :
2
|