Почему объект "студент" не переводится на следующий курс, если добавить условие проверки?
Уже мозг сломал, пытаясь найти ошибку, начал изучать классы и методы, задание вроде как элементарное, написать метод, переводящий объект "студент" на следующий курс.
Пока надо было просто перевести его, всё работало, но когда я добавил проверку на то, что курс на который я его перевожу не больше 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