Свойство объекта не изменяется - PullRequest
0 голосов
/ 21 сентября 2018

Я сталкивался с этой проблемой при запуске с ООП.В этом примере я намерен создать члена спортзала с именем и весом, который работает в течение определенного времени, а затем теряет вес.К сожалению, весовой объект не обновляется после тренировки.

Когда я var_dump() гимнастический объект после тренировки, вес все равно составляет 78, даже если он соответствует критериям для похудения.

Вот код:

КЛАСС ВЕСА:

class Weight
{
  protected $weight;

  public function __construct($weight)
  {
    $this->weight = $weight;
  }

  public function gain($kilograms)
  {
    return new static($this->weight + $kilograms);
  }


  public function loose($kilograms)
  {
    return new static($this->weight - $kilograms);
  }


}

КЛАСС УЧАСТНИКОВ:

class GymMember
{
  protected $name;
  protected $weight;


  public function __construct($name, Weight $weight)
  {
    $this->name = $name;
    $this->weight = $weight;
  }


  public function workoutFor(TimeLength $length)
  {

    if(!$length->inSeconds() > (40 * 60 ))
    {
      return 'Keep up the good work!';
    }

    $this->weight->loose(2);

  }

}

РАБОТА С НОВЫМ ЧЛЕНОМ:

$gymMember = new GymMember('MTROBERT', new Weight(78));

$gymMember->workOutFor(Timelength::minutes(45));



var_dump($gymMember);

1 Ответ

0 голосов
/ 21 сентября 2018

Ваши методы «проиграть» и «получить» возвращают новый объект 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;
}

Любой изэто должно исправить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...