В прошлой статье мы рассмотрели модификаторы видимости и установили для всех наших свойств значение private.



Если бы мы хотели получить доступ к этим свойствам или изменить их в их текущем состоянии, мы бы не смогли этого сделать. Вот где в игру вступают геттеры и сеттеры, или аксессоры и мутаторы.

Геттеры и сеттеры — это всего лишь общедоступные методы, которые либо изменяют, либо извлекают свойство. С помощью различных методов установки мы можем использовать проверки для проверки отправленных данных. Например, предположим, что мы изменяли свойство $year с помощью нашего сеттера. Аргумент, полученный методом установки, будет проверен, т. е. на отрицательные числа, поскольку у вас не может быть отрицательного года.

Добытчики

С помощью геттеров мы можем либо вернуть точное значение свойства, либо некоторую его вариацию. В нашем классе Car есть свойство с именем $car_on, в котором хранится логическое значение 0 или 1. Нам не нужно возвращать 0 или 1, вместо этого мы можем вернуть строку, например off или on.

Давайте перейдем к некоторым примерам, так как геттеры и сеттеры относительно просты для понимания. На самом деле мы уже видели геттер в действии. В нашем классе GermanShepherd мы использовали метод get_eye_color() для возврата цвета глаз. Он уже следовал соглашению об именах геттера, за которым следует get , за которым следует свойство, которое вы пытаетесь вернуть.

Наш метод does_shed() технически также является геттером. Нам просто нужно изменить имя, чтобы оно содержало перед ним строку get для соглашения об именах. Это прекрасный пример возврата строки, несмотря на то, что свойство $does_shed хранит логическое значение.

Сеттеры

Сеттеры следуют аналогичному соглашению об именах с двумя исключениями. Вы угадали первое: строка set добавляется в начале, а не get. Другое отличие состоит в том, что вы каждый раз будете передавать аргумент сеттеру. Если бы мы хотели установить цвет глаз, мы бы использовали метод setEyeColor(string $eye_color). Сеттеры ничего не возвращают, поэтому для нашего типа return будет установлено значение void.

Давайте пробежимся и создадим геттеры и сеттеры для остальных свойств. Если вы используете такой редактор, как PHPStorm, вы можете автоматически сгенерировать геттеры и сеттеры. В PHPStorm нажмите Код -> Создать -> Геттеры и сеттеры. Это сгенерирует все ваши геттеры и сеттеры.

Если вы используете эту функцию PHPStorm, обратите внимание на способ определения булевых геттеров. Поскольку мы спрашиваем, является ли значение истинным или нет, имя геттера начинается со строкой is, например isDoesShed(). Вы можете переименовать его в getDoesShed(), особенно если вы действительно собираетесь возвращать строку, но я оставлю все как есть. Если вы не хотите, чтобы определенные геттеры и сеттеры присутствовали, вы можете отменить их выбор, и они не будут ни доступны, ни модифицируемы.

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

В приведенном выше примере мы используем конструктор для создания новой немецкой овчарки с карими глазами. Мы вызываем наш метод getEyeColor(), и он возвращает Brown. Затем мы используем наш метод установки, чтобы установить цвет глаз Синий. Мы снова вызываем метод getEyeColor(), и на этот раз он возвращает Blue.

Возможно, вы уже заметили тему: каждая из этих статей основана друг на друге. Чтобы подготовиться к следующей статье, давайте также реализуем геттеры и сеттеры для нашего класса Car. И поскольку мы уже говорили об этом, давайте сделаем проверку внутри нашего метода setYear(). Если год меньше нуля, мы отобразим строку с текстом «Недопустимый год». Он вернет void и предотвратит обновление свойства. В противном случае это позволит обновить свойство. Вы можете реализовать столько проверок, сколько захотите.

Теперь, когда мы определили геттеры и сеттеры, мы можем создать объект Car, внести в него несколько изменений с помощью свойств сеттера, а затем получить свойства с помощью наших геттеров. Небольшое примечание: иногда нет смысла иметь сеттеры… просто спросите у опытных объектно-ориентированных разработчиков. Например, если вы создаете класс Dog с царством Animalia, вы не должны его менять. Если бы вы это сделали, это было бы странно.

В приведенном выше примере мы создаем новое транспортное средство и устанавливаем свойства мощности и крутящего момента с помощью методов установки. Затем мы извлекаем HP и Torque. Наконец, мы пытаемся установить год с отрицательным числом, но это просто выводит строку, указывающую, что это недопустимый год.

Вот и все. Вы освоили геттеры и сеттеры или аксессоры и мутаторы, в зависимости от того, кого вы спросите; они означают одно и то же.



Дино Кайич в настоящее время является руководителем отдела информационных технологий в компаниях LSBio (LifeSpan BioSciences, Inc.), Absolute Antibody, Kerafast, Everest BioTech, Nordic MUbio и Exalpha. Он также является генеральным директором MyAutoSystem. Он имеет более чем десятилетний опыт разработки программного обеспечения. У него есть B.S. в области компьютерных наук и несовершеннолетнего в области биологии. Его опыт включает в себя создание приложений для электронной коммерции на уровне предприятия, разработку программного обеспечения на основе исследований и содействие распространению знаний посредством письма.

Вы можете связаться с ним в LinkedIn, подписаться на него в Instagram или подписаться на его публикацию в Medium.

Прочитайте все истории Дино Каджика (и тысяч других авторов на Medium). Ваш членский взнос напрямую поддерживает Дино Кайича и других писателей, которых вы читаете. Вы также получите полный доступ ко всем историям на Medium.