Software, Web, Уроци

Какво представляват Getter и Setter методите?

Сподели с приятели

Директният достъп до propertyтата на обектите създава риск за сигурността и стабилността на цялата апликация. Валидирането на данните, които се записват и форматирането при извеждането на стойностите им, намалят тези нежелани ефекти. Използването на getter и setter методи спомага за елиминирането на тези проблеми.

Създаване на setter метод

Ще започна с класа от предния път и ще го разширя малко:

Имаме две нови неща. Първото е, че имаме ново propertyage със стойност по подразбиране „0“. Стойността по подразбиране ще ни спести малко главоболия при използването на getter метода. Второто е setter метода – setAge. Конвенцията казва, че името на този тип методи трябва да започва с глагола set. В реалния свят нямаме нищо, което да е на отрицателна възраст. Поради тази причина правим и една проста валидация. Ако подадената възраст е по-малка от нула – хвърля Exception (за които ще разберем повече в някоя от следващите статии) и спира изпълнението на програмата. В другия случай – възрастта е по-голяма или равна на нула и се записва в обекта безпроблемно.

Създаване на getter метод

Създаването на getter метод е сравнително лесна задача, тъй като стойностите, които връща са минали валидация през setter метода. В случая ще направя два getter метода, като единият от тях ще връща възрастта в дни. За краткост ще покажа само тях, без целия клас отново:

Нека първо да започнем с проблема, за който споменах малко по-горе. Ако нямаме стойност по подразбиране на възрастта и извикаме метода getAge, преди setAge, това ще предизвика грешка. Тя произлиза от това, че на PHP сме казали да върне цяло число, а всъщност ще върнем null. Същото важи и за getAgeInDays.

Как да навържем всичко?

Ще оставя следното парче код да говори само за себе си:

Заключение

Изградихме механизъм за валидация на входните данни и форматиране на изходните данни. Въпреки това все още property-тата на класа са публични, което за съжаление позволява заобикаляне на изградената защита. За да избегнем този проблем, следващият път ще научим какво е Encapsulation. Това ще ни даде възможност да скрием всички публични property-та, които трябва да минават валидация.


Сподели с приятели