سلام استاد سوال دیشب من در مورد insteadof این هست که همونطور که میبنید نوشته شده این همون instanceof هست؟
و این که برای کار با این تریت چطور باید صدا زده بشه مثلا
Aliased_Talker
برای کار با bigtalk برای هردو مورد a و b به چه صورت صدا زده میشه
trait A {
public function smallTalk() {
echo 'a';
}
public function bigTalk() {
echo 'A';
}
}
trait B {
public function smallTalk() {
echo 'b';
}
public function bigTalk() {
echo 'B';
}
}
class Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
}
}
class Aliased_Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
B::bigTalk as talk;
}
}
$a = new Aliased_Talker;
ابراهیم محمدی۲۲ خرداد ۱۳۹۹، ۱۰:۴۵
سلام و احترام
چیزی که من از instedof توی stackoverflow متوجه شدم، میگفتش که گاهی شما توی دو trait متد مشابه به هم دارید و میخوای بگید به جای اینکه متد درون کلاس A رو استفاده کنی، همون متد درون کلاس B رو استفاده کن که دقیقا مثل همونه.
به همین مثالی که در بالا اومده دقت کنید.
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
B::bigTalk as talk;
}
توی کلاس Aliased_Talker میگه که از متد smallTalk کلاس B به جای متد smallTalk کلاس A استفاده کن و لازم نیست سراغ اون بری.
instanceofهم قضیش فرق میکنه، instanceof میاد در اصل بررسی میکنه که آیا این شی ساخته شده از نوع این کلاس هست؟
class Task extends TaskModel
{
use HasViews;
}
class A
{
}
$t1 = new Task();
if($t1 instanceof A){
echo "ok";
}else{
echo "NAAAA";
}
// output: NAAAA
که ما تو کد بالا توی شرط آوردیم و نتیجه این شده که آبجکت $t۱ از نوع کلاس A نیست