Это отличается от случая к случаю, если вы хотите использовать закрытые переменные с общедоступными получателями и установщиками или просто хотите объявить переменную как общедоступную напрямую.
Причина, по которой было бы целесообразно использовать «геттеры» и «сеттеры», заключается в том, что вы хотите контролировать, когда кто-то получает доступ к данным.
В качестве примера, скажем, вы получили это:
public setBirthday($date)
Затем вы можете убедиться, что дата, переданная этому установщику, является действительной датой рождения.
Но вы не сможете, если просто объявите переменную как public
public $birthday;
На основании комментариев.
Кроме того, если вы решите изменить
внутренний механизм хранения от
строка, содержащая дату до
количество секунд с 01.01.1970 г.
все еще может представить дату внешне
таким же образом, если вы используете
инкапсуляция, но не если вы выставляете
переменные напрямую. Каждый кусок
код, который коснулся внутреннего
переменная напрямую теперь будет повреждена.
Это означает, что если механизм внутреннего хранилища изменится с 01.01.1970 на количество секунд, то вам не нужно менять «Внешний API». Причина в том, что вы имеете полный контроль над ним:
public getBirthday() {
// you can still return a string formatted date, even though your
// private variable contains number of seconds from 1/1/1970
}