💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ ابراهیم محمدی
کاربرد ترید
امیر صالحی حل شده توسط امیر صالحی

سلام استاد سوال دیشب من در مورد 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 نیست

 

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