راکت
ایلیا غلامی
ایلیا غلامی
4 سال پیش توسط ایلیا غلامی مطرح شد
حل
20 پاسخ

ایجاد یک public function در یک public function دیگر

سلام من بعضی وقت ها دیدم که مثلا یک فانکشن تو یک فانکشن دیگه تو کلاس هست ، برای مثال

$class->fun1()->fun2();

ساخت این به چه صورته ؟


ثبت پرسش جدید
افشار محمودیان
افشار محمودیان
تخصص :برنامه نویس
@afsharmahmoodian4 سال پیشمطرح شد
0
$class->fun1()->fun2();

به این چیزی که شما بهش برخوردید به فارسی میگن متد های ذنجیره ای و چیز چرتی هم نیست و در جای خودش کاربرد داره .
به این صورت که هر متد از یک کلاس یک کاری رو روی آبجکت انجام میده (مثلا مقدار یک پراپرتی رو تغییر میده) و خودش رو برمیگردونه.
به کد زیر دقت کنید:

class Image{

    protected $image;

    public function crop(){

        //crop $image
        return $this;
    }

    public function resize(){

        //resize $image
        return $this;
    }

    public function filter(){

        //filter $image
        return $this;
    }

    public function get(){

        readfile($image); //masalan
    }

}

حتی ممکنه این فانکشن آبجکتی از نوع خودش برنگردونه و آبجکت دیگه ای رو برگردونه، اگر اونم دارای متد های ذنجیره ای باشه میتونین ازش استفاده کنید .
به کد زیر دقت کنید:
مثلا من میتونم اینطوری استفاده کنم:


$image = new Image();
$image->crop()->resize()->filter()->getSVG()->a()->b()->c()->get();
class Image{

    protected $image;

    public function crop(){

        //crop $image
        return $this;
    }

    public function resize(){

        //resize $image
        return $this;
    }

    public function filter(){

        //filter $image
        return $this;
    }

    public function getSVG(){

        return new SVG($this->image); //masalan
    }

    public function get(){

        readfile($this->image); //masalan
    }

}

class SVG{

    protected $svg;

    public function a(){

        //do something $svg
        return $this;
    }

    public function b(){

        //do something $svg
        return $this;
    }

    public function c(){

        //do something with $svg
        return $this;
    }
    public function get(){

        readfile($this->svg); //masalan
    }

}


Ibo Kiani
Ibo Kiani
تخصص :Backend developer
@abdoki77884 سال پیشمطرح شد
-1

اون احتمالا اینجوریه که فانکشن اول یه آبجکت برمیگردونه که داخلش اون فانکشن دوم هست


ایلیا غلامی
ایلیا غلامی
تخصص :برنامه نویس
@IliyaGholami4 سال پیشمطرح شد
0

@abdolrahman تست کردم ، ولی چیز چرتیه ، خب کاربر میتونی بدون اون هم دسترسی داشته باشه دیگه میاد میزنه

$class->fun2();

ایلیا غلامی
ایلیا غلامی
تخصص :برنامه نویس
@IliyaGholami4 سال پیشمطرح شد
0

میخوام وقتی یه شرط true بود یه فانکشن بسازم داخل اون پابلیک فانکشنم


ایلیا غلامی
ایلیا غلامی
تخصص :برنامه نویس
@IliyaGholami4 سال پیشمطرح شد
0

@abdolrahman مگه منظورتون این نیست

public function fun1()
  {
     return $this;
  }
public function fun2()
  {
    echo 'Hello World';
  }
$class->fun1()->fun2()

Ibo Kiani
Ibo Kiani
تخصص :Backend developer
@abdoki77884 سال پیشمطرح شد
0

نه لزوما
خب هر جور آبجکتی میتونه برگردونه حتما که نباید this باشه


Ibo Kiani
Ibo Kiani
تخصص :Backend developer
@abdoki77884 سال پیشمطرح شد
0

و توی اون آبجکتی که برمی گردونه فانکشن fun2() هست


ایلیا غلامی
ایلیا غلامی
تخصص :برنامه نویس
@IliyaGholami4 سال پیشمطرح شد
Ibo Kiani
Ibo Kiani
تخصص :Backend developer
@abdoki77884 سال پیشمطرح شد
-1

پی اچ پی کار نیستم و نمیتونم مثال بزنم


:)
:)
تخصص :اندروید - تازه کار
@ERR4 سال پیشمطرح شد
0

با سلام .ممکنه یه شی برگشت بده و حتی میتونیم متد اون شی رو بخونیم که دوست عزیز @abdolrahman نیز اشاره کردند.
مثلا:


class testClass {
    var $bar = 'hi';
    public function fun2(){
     return "ok";
  }

}

public function fun1(){
     return new testClass();
  }

 var $ok = fun1()->fun2();

Ibo Kiani
Ibo Kiani
تخصص :Backend developer
@abdoki77884 سال پیشمطرح شد
افشار محمودیان
افشار محمودیان
تخصص :برنامه نویس
@afsharmahmoodian4 سال پیشمطرح شد
0
$class->fun1()->fun2();

به این چیزی که شما بهش برخوردید به فارسی میگن متد های ذنجیره ای و چیز چرتی هم نیست و در جای خودش کاربرد داره .
به این صورت که هر متد از یک کلاس یک کاری رو روی آبجکت انجام میده (مثلا مقدار یک پراپرتی رو تغییر میده) و خودش رو برمیگردونه.
به کد زیر دقت کنید:

class Image{

    protected $image;

    public function crop(){

        //crop $image
        return $this;
    }

    public function resize(){

        //resize $image
        return $this;
    }

    public function filter(){

        //filter $image
        return $this;
    }

    public function get(){

        readfile($image); //masalan
    }

}

حتی ممکنه این فانکشن آبجکتی از نوع خودش برنگردونه و آبجکت دیگه ای رو برگردونه، اگر اونم دارای متد های ذنجیره ای باشه میتونین ازش استفاده کنید .
به کد زیر دقت کنید:
مثلا من میتونم اینطوری استفاده کنم:


$image = new Image();
$image->crop()->resize()->filter()->getSVG()->a()->b()->c()->get();
class Image{

    protected $image;

    public function crop(){

        //crop $image
        return $this;
    }

    public function resize(){

        //resize $image
        return $this;
    }

    public function filter(){

        //filter $image
        return $this;
    }

    public function getSVG(){

        return new SVG($this->image); //masalan
    }

    public function get(){

        readfile($this->image); //masalan
    }

}

class SVG{

    protected $svg;

    public function a(){

        //do something $svg
        return $this;
    }

    public function b(){

        //do something $svg
        return $this;
    }

    public function c(){

        //do something with $svg
        return $this;
    }
    public function get(){

        readfile($this->svg); //masalan
    }

}


ایلیا غلامی
ایلیا غلامی
تخصص :برنامه نویس
@IliyaGholami4 سال پیشمطرح شد
0

@afsharmahmoodian سلام ، اخه اونطوری طرف میتونی هر متدی که توی یک کلاس پابلیک هست رو صدا کنه


افشار محمودیان
افشار محمودیان
تخصص :برنامه نویس
@afsharmahmoodian4 سال پیشمطرح شد
0

مشکلش چیه ؟ @ilianazari869


علیرضا کفایتی
علیرضا کفایتی
تخصص :برنامه نویس laravel, vue.js
@alirezakefayati4 سال پیشمطرح شد
0

@abdolrahman
از پاسخ های کوتاه و اسپم بپرهیزید !!!!!!!!
از پاسخ های نا مرتبط به تخصصتون و راهنمایی های نا مناسب بپرهیزید !!!

https://roocket.ir/discuss/%D9%88%DB%8C%DA%98%DA%AF%DB%8C-%D9%87%D8%A7%DB%8C-%D9%BE%D8%A7%D8%B3%D8%AE-%D8%AE%D9%88%D8%A8


ایلیا غلامی
ایلیا غلامی
تخصص :برنامه نویس
@IliyaGholami4 سال پیشمطرح شد
0

مثلا من میخوام طرف تا وقتی که مقادیر رو درست وارد نکرده بود و شرطم true نبود نتونه به فانکشن helloWorld دسترسی داشته باشه


ایلیا غلامی
ایلیا غلامی
تخصص :برنامه نویس
@IliyaGholami4 سال پیشمطرح شد
0

مثلا من میخوام طرف تا وقتی که مقادیر رو درست وارد نکرده بود و شرطم true نبود نتونه به فانکشن helloWorld دسترسی داشته باشه


Ibo Kiani
Ibo Kiani
تخصص :Backend developer
@abdoki77884 سال پیشمطرح شد
:)
:)
تخصص :اندروید - تازه کار
@ERR4 سال پیشمطرح شد
1

@gomnam
به نظرم امکان نظر دادن زیر پست ها را اضاف کنید تا سوالات کوتاه که جواب نیستند را زیر پست بزارن
چون بیشتر سوالاتی که ایشون پرسیدند مرتبط بود
مثلن در stackoverflow


:)
:)
تخصص :اندروید - تازه کار
@ERR4 سال پیشمطرح شد
0

@ilianazari869
شما باید داخل فانکشن مقدار سنجی کنید و اگر true بود رو متغییر اعمال شه
مثلن یه متد public به نام setAge در کلاس دارید و یک متغییر private به نام age
باید داخل setAge ورودی این متد را اعتبار سنجی کنید که اگر سن بالاتر از 20 بود به متغییر age مقدار بده
یک متد getAge نیز بسازید که مقدار age برگردونه برای کلاس هایی که میخوان مقدار متغییر age را بگیرند
با این کار تنها متد setAge میتونه به این متغییر مقدار بده (مقداری که خودتون مجاز کردید) و تنها متد getAge میتونه مقدارش رو بخونه


افشار محمودیان
افشار محمودیان
تخصص :برنامه نویس
@afsharmahmoodian4 سال پیشمطرح شد
1

@ilianazari869
دستورات کنترلی مثل شرط ها و حلقه ها ، مربوط به زمان اجرا هستند و نمیشه باهاشون توابع و کلاس ها رو دستکاری کرد .
(البته این تو همه زبان ها صدق نمیکنه ، مثلا vhdl اینطور نیست).
شما باید کاری رو که میخواهید تو کد خودتون هندل کنید.
مثلا اگر شرط برقرار بود کاری که میخواهید انجام بشه و true برگردونه ، اگر نبود false برگردونه.
یا میتونید از کلاس های کمکی و اینترفیس ها کمک بگیرید که برای این کار مناسبه .


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام