Параметры в методах интерфейсов в ООП в PHP

При описании методов в интерфейсах необходимо указывать не только имена самих методов, но и принимаемые ими параметры.

Давайте посмотрим на примере. Пусть у нас дан интерфейс iMath, описывающий класс для математических операций сложения, вычитания, умножения и деления. Пусть этот интерфейс будет выглядеть так:

iMath.php<?php
  interface iMath
  {
    public function sum();
    public function subtract();
    public function multiply();
    public function divide();
  }
?>

Сейчас методы нашего интерфейса не принимают никаких параметров. И на самом деле методы класса, который будет реализовывать этот интерфейс, также не должны будут принимать параметров, иначе будет ошибка.

Давайте укажем параметры методов в нашем интерфейсе:

iMath.php<?php
  interface iMath
  {
    public function sum($a, $b);
    public function subtract($a, $b);
    public function multiply($a, $b);
    public function divide($a, $b);
  }
?>

Напишем теперь реализацию нашего интерфейса:

Math.php<?php
  class Math implements iMath
  {
    public function sum($a, $b)
    {
      return $a + $b;
    }
    
    public function subtract($a, $b)
    {
      return $a - $b;
    }
    
    public function multiply($a, $b)
    {
      return $a * $b;
    }
    
    public function divide($a, $b)
    {
      return $a / $b;
    }
  }
?>

Если попытаться в нашем классе задать другое количество параметров - у нас это просто не получится: PHP выдаст ошибку. Таким образом мы не сможем ни случайно забыть какой-то параметр, ни случайно добавить лишний.

Задание 1

Пусть у нас дан такой интерфейс iUser:

php<?php
  interface iUser
  {
    public function setName($name);
    public function getName();
    public function setAge($age);
    public function getAge();
  }
?>

Сделайте класс User, который будет реализовывать данный интерфейс.