How to make a chain calculation using OOP?

61 Views Asked by At

Given MyCalculator class

class MyCalculator
{
    public float $a, $b, $c, 
    public MyCalculator $result;
            
    public function __construct ($a, $b)
    {
        $this->a = $a;
        $this->b = $b;
        
        $this->result = new MyCalculator($this->c, 0)
    }

    public function add()
    { 
        $this->result->c = $this->a + $this->b;
        return $this->result->c;
    }

    public function divideBy($num)
    { 
        $this->result->c = $this->result->c / $num;
        return $this->result->c;
    }
}

$calc = new MyCalculator(12, 6);

In my code works good either:

echo $calc->Add()  // Displays: 15

or

echo $calc->Add()->DivideBy(3)   // Displays: 5  ((6+9)/3=5)

But I cannot make them working both!

1

There are 1 best solutions below

4
David On BEST ANSWER

Based on the description of your problem, you will want to setup this class definition:

class MyCalculator
{
    private $value1;
    private $value2;
    public $total;

    public function __construct($value1, $value2, $total = null)
    {
        $this->value1 = $value1;
        $this->value2 = $value2;
        $this->total = $total;
    }

    public function add()
    {
        $this->total = $this->value1 + $this->value2;
        return new MyCalculator(0, 0, $this->total);
    }

    public function divideBy($value)
    {
        return $this->total / $value;
    }
}

What this does is set two required property values and one optional property value in the constructor, create an add method that returns a new instance of the class where the total matches the sum of the two values passed in the constructor, and creates a divideBy method that divides the current total by the desired number.

Here is an example of using it:

$calc = new MyCalculator(6, 9);
echo $calc->add()->divideBy(3);

Fiddle: https://onlinephp.io/c/498ed