Вопрос

Проблема

Предположим, у вас есть пользователь класса. Вы хотите иметь возможность вернуть этот объект пользователя другим, чтобы они могли использовать его для извлечения информации с помощью Getters. Тем не менее, вы не хотите, чтобы люди могли легко установить внутреннее состояние, потому что внутренняя информация должна напрямую относиться к строке в базе данных. Имеет ли смысл иметь защищенные мутаторы (сеттеры), чтобы только расширенный класс мог установить переменные? Это плохая практика, нерелевантная, излишняя или бесполезная?

Я подумал о попытке ограничить __construct на одном использовании (я считаю, что это иногда оценивается как синглтонский шаблон - хотя я не уверен, полностью ли я понимаю).

Я любитель -программа, простите любое невежество. Спасибо.

Пример:

<?php

    class user
    {

    private username;

    protected function set_username($username)
    {
        $this->username = $username;
    }

    public function get_username()
    {
        return $this->username;
    }

?>
Это было полезно?

Решение

Зависит от. Если ничто не должно произойти при изменении состояния, вы можете вообще оставить сеттеров. Любой подкласс будет иметь прямой доступ к свойствам, которые установлены защищенными или более свободными.

Если вам нужно что -то произойти, когда изменение состояния (например, обновление базы данных происходит при изменении состояния), то сети будут намного проще, так как вызов в код обновления базы данных будет помещен в сеттер. Это означает, что если вы всегда проходите через сеттер, то БД всегда будет обновлять при изменении состояния объекта.

Короче говоря, это зависит.

Другие советы

Если у вас есть конструктор, который принимает, например, идентификатор, зачем вам вообще иметь сеттеры. Не существует правила, заставляя вас давать сборщики объектов только потому, что у него есть Getters. Если ваша использование создает где -то объект и после этого используйте его только для извлечения из него данных, просто не создайте никакого сеттера вообще.

Расширение объектов может манипулировать самих защищенными переменными класса, поэтому им также не требуется какая -либо форма сеттера. Если вы не хотите, чтобы «внешний мир» имел возможность что -то установить в класс, не позволяйте это.

Ваш код полностью прекрасно, и он идеально инкапсулирует. TT также поддерживает свободную связь.

Для облегчения использования вы можете добавить все необходимые (должны иметь) члены в качестве параметров конструктора.

Что касается шаблона Синглтона, используйте его с осторожностью. Пользователи общины не являются одинокими. Обратитесь к рефакторингу с шаблонами (Джошуа Керевский).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top