Private метод не срабатывает
Задача такова: Дополните класс Worker private методом checkAge, который будет проверять возраст на корректность (от 1 до 100 лет). Этот метод должен использовать метод setAge перед установкой нового возраста (если возраст не корректный - он не должен меняться).
С public методом checkAge все работает корректно, а вот с private так и не получилось.
class Worker{
private $name;
private $age;
private $salary;
public function setAge($age){
if (is_numeric($age)){
$this->age = $age;
} else{
die("could not set age");
}
}
public function getAge(){
return $this->age;
}
private function checkAge(){
$min = 1;
$max = 100;
if ($this->age >= $min && $this->age <= $max){
return $this->age;
} else{
die("different age");
}
}
}
$workerOne = new Worker;
$workerTwo = new Worker;
$workerOne->setAge(25);
echo $workerOne->checkAge();
Ответы (1 шт):
Автор решения: Borislav
→ Ссылка
class Worker{
private $name;
private $salary;
private $age;
public function getAge()
{
return $this->age;
}
public function setAge($age): void
{
if (!is_numeric($age)) {
die("Age is not numberic value.");
}
if ($this->checkAge($age)) {
$this->age = $age;
}
echo 'Age has been successfully set.';
}
private function checkAge($age): bool
{
$min = 1;
$max = 100;
if ($age >= $min && $age <= $max){
return true;
}
die("Age value is out of range.");
}
}
----- Клиентский код -----
(new Worker)->setAge(25); // выведет `Age has been successfully set.`
- Советую прочитать про модификаторы доступа в PHP, довольно простая тема, довольно неплохо раскрыта тут. Вкратце, то private модификатор доступа ограничивает вас областью видимости текущего класса, т.е. вы можете использовать его только внутри методов класса, в котором он описан (имеются исключительные ситуации, где это можно обойти, но это не ваш случай).
- Метод проверки возраста должен быть вызван перед его установкой, т.к. если он не входит в диапазон, то дальнейшее выполнение программы - бессмысленно. В данном случае, тема будет уже сложней, но не менее полезная. Про программирование по контракту можно почитать тут, хоть код и на Java, но примеры очень показательны и понятны.