Почему объект "студент" не переводится на следующий курс, если добавить условие проверки?

Рейтинг: 1Ответов: 1Опубликовано: 02.04.2023

Уже мозг сломал, пытаясь найти ошибку, начал изучать классы и методы, задание вроде как элементарное, написать метод, переводящий объект "студент" на следующий курс.

Пока надо было просто перевести его, всё работало, но когда я добавил проверку на то, что курс на который я его перевожу не больше 5, всё сломалось и я не могу понять в чём проблема, уже раз 100 перечитал код.

<?php
class Student
{
    private $name;
    private $course;
    public function __construct($name)
    {
        $this->name = $name;
        $this->course = 1;
    }
    public function getName()
    {
        return $this->name;
    }
    public function getCourse()
    {
        return $this->course;
    }
    // public function transferToNextCourse()
    // {
    //     $this->course++;
    // }
    public function checkCourse($course)
    {
        if ($course <= 5) {
            return true;
        } else {
            return false;
        }
    }
    public function transferToNextCourse()
    {
        $newCourse = $this->course++;
        if($this->checkCourse($newCourse)) {
            $this->course = $newCourse;
        } 
    }
}

При проверке работы кода, курс студента до и после перевода остаётся равен 1

<?php
require_once 'Student.php';

$student16 = new Student('Andrew');
echo $student16->getCourse();
$student16->transferToNextCourse();

echo '<br>';
echo $student16->getCourse();

Дополнение: Написал + 1 вместо ++ и всё магическим образом заработало, только не понятно почему так.

Ответы

▲ 1Принят

постинкремент (course++) - берет вашу переменную копирует и потом прибавляет 1.

int x = 5;
int buf = x;
x = buf + 1;

преинкремент (++course) - напрямую прибавляет 1.

int x = 5;
x = 1 + x; 

из-за этого такой код:

x = 10;
buf = x++;
//buf == 10
//x == 11


x = 10;
buf = ++x;

//buf == 11
//x == 11