۱ امیر ابوئی
ترتیب اولویت متدها در trait و class
امیر صالحی حل شده توسط امیر صالحی

سلام و درود

ببخشید بنده تو بحث اولویت متدهای trait و class این دو جمله رو خوندم که استاد هم داخل ویدیو گفتن ولی یکم برام گنگ بود تفکیک شون از هم، امکانش هست یکم واضح‌تر برام توضیح بدید ممنون میشم:

 

1. the methods of a trait override inherited methods from the parent
class
2. the methods defined in the current class override methods from
a trait

سلام و احترام

به کد زیر دقت کنید

۱ - 

<?php
trait test
{
    public function method1()
    {
        echo "hello from trait";
    }
}
class one 
{
    public function method1()
    {
        echo "hello from class one";
    }
}
class two extends one
{
   use test;
}
$two = new two();
$two->method1();

توی کد بالا همون طور که میبینید کلاس two کلاس one رو extends کرده و در داخل کلاس one و هم trait متدی به اسم method۱ وجود داره که دارن کار خودشون رو انجام میدن. حالا اگه ما بیایم از کلاس two متد method۱ رو صدا بزنیم و چون ما این دو تا متد رو هم داخل one داریم و هم داخل تریت test الویت با trait هستش و متد method۱ از کلاس one رو override میکنه و متن hello from trait رو چاپ میکنه

۲ - حالا شما فرض کنید که ما متد method۱ رو هم دقیقا بیاریم بزاریم داخل کلاس two و دوباره اجرا کنیم

<?php
trait test
{
    public function method1()
    {
        echo "hello from trait";
    }
}
class one 
{
    public function method1()
    {
        echo "hello from class one";
    }
}
class two extends one
{
   use test;
   public function method1()
    {
        echo "hello from current";
    }
}
$two = new two();
$two->method1();

متد method۱ دقیقا اولیت داره هم به متد داخل کلاس پدر (one) و هم تریت (test) و متد خودش رو اجرا میکنه و متن hello from current چاپ میشه

بهترین پاسخ
امیر صالحی ۱۰ اردیبهشت ۱۴۰۰، ۱۷:۰۷