Ваши методы «проиграть» и «получить» возвращают новый объект Weight
, но ваш GymMember
ничего с этим не делает:
public function workoutFor(TimeLength $length)
{
// ...
$this->weight->loose(2);
}
С момента потери (тангенциально: "*Метод 1006 * lost", not" oose") возвращает новый объект вместо его изменения, и вы не присваиваете это возвращаемое значение чему-либо, оно просто теряется.
Два возможных решения:
Изменить GymMember::workout()
, чтобы он что-то вроде:
$this->weight = $this->weight->loose(2);
Или изменить Weight::lose()
, чтобы он что-то сделал:
public function lose($kilograms)
{
$this->weight -= $kilograms;
}
Любой изэто должно исправить вашу проблему.