@Vladimir-Hetman

Зачем дублировать сеттер и геттер?

Прочитал множество материалов про геттеры и сеттеры и везде один синтаксис:
class User{
private static $age = 32;

static function set($newValue){
self::$age = $newValue;
}

static function get(){
return self::$age;
}}

User::set(2);
echo User::get();


Зачем создавать два метода(геттер и сеттер)?
В одном изменять(сеттер), а в другом возвращать(геттер)?
Когда можно все это упростить, то есть
объединить геттер и сеттер в один метод или я чего-то не понимаю?

Вот переписанный верхний код с одним методом:
class User{
private static $age = 32;

static function get_set($newValue){
self::$age = $newValue;
return self::$age;
}}

echo User::get_set(5);
  • Вопрос задан
  • 135 просмотров
Решения вопроса 2
vabka
@vabka
Токсичный шарпист
А в чём смысл такого метода get_set?
Что если я только прочитать хочу, не меняя значение поля?
Ответ написан
toxa82
@toxa82
Не может быть везде один этот синтаксис, он использует статическое свойство которое принадлежит классу, а не объекту. Вы не сможете создать два объекта юзер с разными значениями свойства age.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Если уж говорить об едином методе, то скорее так:
function getSetAge(?int $age=null): int
{
    if (!is_null($age)) {
        $this->age = $age;
    }
    return $this->age;
}}

Но, мы уже не сможем записать null, а получать значение, которые мы только что записали и вовсе не нужно.
Даже так не делают, потому что, это логически совершенно разные операции и гораздо удобнее их разнести по разным методам. Если вы думаете, что упрощение - это меньше символов, то это не так. Упрощение - это разнесение независимых частей, а складывание всего в одну кучу только ухудшает чтение.
Не говоря уже о том, что использование геттеров-сеттеров не очень хорошая практика, методы должны нести смысловую нагрузку, а не просто менять внутренние свойства, иначе это ничем не лучше публичных свойств. Хотя и тут тоже нужно без фанатизма.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы