روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ آرمان محمدی پور
پیاده سازی متد setStrategy
جامعه پی اچ پی ایجاد شده در ۲۲ شهریور ۱۴۰۱

وقتی میشه Strategy رو توی همون constrcut ست کرد چه لزومی به نوشتن setStrategy هست؟

متوجه این بخش نشدم

سلام دوست عزیز

ما براش setter ست کردیم و علتش اینه که بتونیم در ران تایم استراتژیمون رو در صورت نیاز تغییر بدیم

برای همین دیگه نیومدیم دوباره کاری کنیم و یه دور جدا توی constructor این رو تعریف کنیم

موفق باشید ?

محمد گازری ۲۲ شهریور ۱۴۰۱، ۱۱:۴۸

اگر construct به این صورت تعریف بشه هم به نظرم میتونه استراتژیمون تو ران تایم تغییر بکنه

    private $paymentStrategy;
    public function __construct(PaymentInterface $paymentStrategy)
    {
        $this->paymentStrategy = $paymentStrategy;
    }

و

$payment = new Payment(new OnlinePayment);
$payment->pay(10000);

تفاوتی داره با این که استاد پایین تعریف کرده داره؟

    private $paymentStrategy;
    public function __construct(PaymentInterface $paymentStrategy)
    {
        $this->setPaymentStrategy($paymentStrategy);
    }
    // To change strategy on runtime
    public function setPaymentStrategy(PaymentInterface $paymentStrategy)
    {
        $this->paymentStrategy = $paymentStrategy;
    }

و

$payment = new Payment(new OnlinePayment);
$payment->setPaymentStrategy(new OnlinePayment);
$payment->pay(10000);


آرمان محمدی پور ۲۲ شهریور ۱۴۰۱، ۱۲:۱۸

خب کد استاد طبق سناریو بالا که توضیح دادم درست هست و برای همین setter تعریف کردیم دیگه!

محمد گازری ۲۲ شهریور ۱۴۰۱، ۱۲:۲۴