0

I want to start a subscription with start and if addTrail in present alter the outcome of start.

Start subscription without trial period

 (new Premium)->start(1, 'paid', 30);

Start subscription with 15 days of trial period

 (new Premium)->start(1, 'paid', 30)->addTrial(15);

To illustrate

class Premium
{
    private $trialDays;

    public function start($user_id, $type, $endsInDays) {

        if($trialDays) {
            $endsInDays = $endsInDays + $trialDays;
        }

        return 'Your subscription will end in ' . $endsInDays . 'days';

    }

    public function addTrial($days) {
        $this->trialDays = $days;
    }

}
Line in Linus
  • 390
  • 8
  • 25
  • Does this answer your question? [PHP method chaining?](https://stackoverflow.com/questions/3724112/php-method-chaining) – Scuzzy Jan 19 '21 at 00:00

1 Answers1

1

Your start function has to return $this; if you want to "chain" methods

public function start($user_id, $type, $endsInDays) {
    if($trialDays) {
        $endsInDays = $endsInDays + $trialDays;
    }
    return $this;
}

Otherwise use standard syntax

$premium = new Premium;
$premium->start(1,'paid',30);
$premium->addTrial(15);
Scuzzy
  • 12,186
  • 1
  • 46
  • 46