کاربرد ترید

پرسیده شده
فعالیت 1422 روز پیش
دیده شده 857 بار
0

سلام استاد سوال دیشب من در مورد insteadof این هست که همونطور که میبنید نوشته شده این همون instanceof هست؟

و این که برای کار با این تریت چطور باید صدا زده بشه مثلا

Aliased_Talker

برای کار با bigtalk برای هردو مورد a و b به چه صورت صدا زده میشه 

فایل پیوست

ابراهیم محمدی
ابراهیم محمدی

22 خرداد 99

1
حذف شده

سلام و احترام

چیزی که من از 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 نیست

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

22 خرداد 99

0
حذف شده
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;

 

فایل پیوست

ابراهیم محمدی

توسط

ابراهیم محمدی

22 خرداد 99