Как можно сделать откат и повтор OOP? echo $calculate->init(20). ->compute('+', 2) ->replay(); ->undo(); ->getResult(); каким образом можно реализовать откат и повтор метода в OOP?
Для реализации отката и повтора методов в ООП можно создать класс Calculator с методами init, compute, replay, undo и getResult. Ниже приведен пример реализации класса Calculator:
class Calculator { private $result; private $history; public function init($value) { $this->result = $value; $this->history = [$value]; return $this; } public function compute($operator, $value) { switch ($operator) { case '+': $this->result += $value; break; case '-': $this->result -= $value; break; case '*': $this->result *= $value; break; case '/': $this->result /= $value; break; default: break; } $this->history[] = $this->result; return $this; } public function replay() { $this->result = end($this->history); return $this; } public function undo() { array_pop($this->history); $this->result = end($this->history); return $this; } public function getResult() { return $this->result; } } $calculate = new Calculator(); echo $calculate->init(20)->compute('+', 2)->replay()->undo()->getResult();
В данном примере класс Calculator содержит методы для инициализации значения, выполнения операций, отката, повтора и получения результата. При вызове методов init и compute результат операции история вычислений сохраняется в массиве history. Метод replay возвращает результат последней операции, а метод undo отменяет последнюю операцию. Метод getResult возвращает текущее значение результата.
Для реализации отката и повтора методов в ООП можно создать класс Calculator с методами init, compute, replay, undo и getResult. Ниже приведен пример реализации класса Calculator:
class Calculator {private $result;
private $history;
public function init($value) {
$this->result = $value;
$this->history = [$value];
return $this;
}
public function compute($operator, $value) {
switch ($operator) {
case '+':
$this->result += $value;
break;
case '-':
$this->result -= $value;
break;
case '*':
$this->result *= $value;
break;
case '/':
$this->result /= $value;
break;
default:
break;
}
$this->history[] = $this->result;
return $this;
}
public function replay() {
$this->result = end($this->history);
return $this;
}
public function undo() {
array_pop($this->history);
$this->result = end($this->history);
return $this;
}
public function getResult() {
return $this->result;
}
}
$calculate = new Calculator();
echo $calculate->init(20)->compute('+', 2)->replay()->undo()->getResult();
В данном примере класс Calculator содержит методы для инициализации значения, выполнения операций, отката, повтора и получения результата. При вызове методов init и compute результат операции история вычислений сохраняется в массиве history. Метод replay возвращает результат последней операции, а метод undo отменяет последнюю операцию. Метод getResult возвращает текущее значение результата.