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

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

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

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

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


ثبت پرسش جدید
افشار محمودیان
تخصص : برنامه نویس
@afsharmahmoodian 3 سال پیش آپدیت شد
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
    }

}


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
-1

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


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

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

$class->fun2();

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

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


ایلیا غلامی
تخصص : برنامه نویس
@IliyaGholami 3 سال پیش آپدیت شد
0

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

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

عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

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


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

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


ایلیا غلامی
تخصص : برنامه نویس
@IliyaGholami 3 سال پیش مطرح شد
عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
-1

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


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

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


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

}

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

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

عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
افشار محمودیان
تخصص : برنامه نویس
@afsharmahmoodian 3 سال پیش آپدیت شد
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
    }

}


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

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


افشار محمودیان
تخصص : برنامه نویس
@afsharmahmoodian 3 سال پیش مطرح شد
0
علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش مطرح شد
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


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

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


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

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


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش مطرح شد
1

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


:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش آپدیت شد
0

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


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

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


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

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