سلام و درود
ببخشید بنده تو بحث اولویت متدهای 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 چاپ میشه