АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗ppOpBsROP 9 of 107 menu
Долгожданный Бесплатный курс по выкладке сайта на хостинг. МЫ УЖЕ НАЧАЛИ! Присоединяйтесь к нам!

Свойства только для чтения в ООП на PHP

Сейчас мы с вами сделаем так, чтобы в объекте какое-то свойство было доступно только для чтения, но не для записи (англ. read-only).

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

Давайте попробуем реализовать описанное. Пусть у нас дан вот такой класс User:

<?php class User { private $name; private $age; } ?>

Давайте сделаем так, чтобы свойство name было доступно только для чтения, а свойство age - и для чтения и для записи. Для этого свойству name сделаем только геттер, а свойству age - и геттер и сеттер:

<?php class User { private $name; private $age; // Геттер для имени: public function getName() { return $this->name; } // Геттер для возраста: public function getAge() { return $this->age; } // Сеттер для возраста: public function setAge($age) { $this->age = $age; } } ?>

Давайте теперь добавим конструктор объекта, в котором будем задавать начальные значения наших свойств:

<?php class User { private $name; private $age; // Конструктор объекта: public function __construct($name, $age) { $this->name = $name; $this->age = $age; } // Геттер для имени: public function getName() { return $this->name; } // Геттер для возраста: public function getAge() { return $this->age; } // Сеттер для возраста: public function setAge($age) { $this->age = $age; } } ?>

Все - наша задача решена, убедимся в этом:

<?php $user = new User('john', 25); // создаем объект с начальными данными // Имя можно только читать, но нельзя поменять: echo $user->getName(); // выведет 'john' // Возраст можно и читать, и менять: echo $user->getAge(); // выведет 25 echo $user->setAge(30); // установим возраст в значение 30 echo $user->getAge(); // выведет 30 ?>

Сделайте класс Employee, в котором будут следующие свойства: name, surname и salary.

Сделайте так, чтобы свойства name и surname были доступны только для чтения, а свойство salary - и для чтения, и для записи.