‎‎الگوهاPHP OOP -‎ Trails

Previous >    <Next  

‎در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();
?> 

--(go to editor for change code and run)

‎تشريح مثال ـ در اينجا الگوئي بانامmessage1 تعريف شده وبدنبال كلاسwelcome ايجاد وازآن ‎الگودر ايجاد كلاس استفاده كرده است .در اين حالت متد الگو قابل دسترسي در كلاس ميباشد.

‎اگر در كلاس ديگري تابع‎msg1( )‎ مورد نياز باشد، بسادگي ميتواند الگوي message1‎درآن كلاس از طريقuse message1 ; ‎فعال شود.

‎‎بكارگيري چند الگوئيPHP -‎ Using Multiple Traits -‎

‎‎مثال ـ در اين مثال نمونه استفاده از چند الگو در يك كلاس نشان داده شده است.

<?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();
?> 

--(go to editor for change code and run)

‎تشريح مثال ـ در اينجا دوالگويmessage1 وmessage2 تعريف وسپس در كلاسهايWelcom1 و Welcom2‎استفاده شده اند .در welcom1 الگوي message1 و در welcom2 هردو الگو فعال اند . ‎در كلاسwelcom2 دو الگو بصورت use messag1 , message2; ‎استفاده شده اند.


Previous >    <Next