1
resposta

Quando usar private readonly com getters ou public readonly no PHP

Boa tarde,

No vídeo, o modificador de acesso dos atributos do construtor é alterado de private para public, o que deixa o código mais enxuto (menos linhas).

No entanto, se a classe evoluir e receber regras de negócio adicionais, seria necessário refatorar o acesso aos atributos.

No caso da classe Filme, que já possui comportamentos como adicionarNota e calcularMedia, não fica claro se seria válido usar public readonly.

Manter private readonly + getters é mais flexível para futuras alterações, seguindo os princípios de Clean Code e SOLID.
Isso é especialmente indicado para entidades de domínio ou classes com comportamento, pois permite adicionar lógica futura (formatar, validar ou transformar valores) sem quebrar o código externo.

1 resposta

Olá Jardel! Como vai?

Você levantou uma questão muito interessante sobre o uso de private readonly com getters versus public readonly no PHP. Vamos explorar um pouco mais essas opções.

Quando você utiliza private readonly com getters, está seguindo uma abordagem que promove o encapsulamento. Isso significa que, mesmo que os atributos sejam somente leitura, você ainda pode controlar como eles são acessados. Isso é especialmente útil se, no futuro, você precisar adicionar alguma lógica extra ao acessar esses atributos, como formatação ou validação. Por exemplo, se você quiser formatar o nome de um filme antes de retorná-lo, você poderia fazer isso dentro do getter:

class Filme {
    private readonly string $nome;

    public function __construct(string $nome) {
        $this->nome = $nome;
    }

    public function getNome(): string {
        return strtoupper($this->nome); // Exemplo de formatação
    }
}

Por outro lado, usar public readonly simplifica o código, eliminando a necessidade de métodos getters, e ainda garante que os atributos não sejam modificados após a inicialização. Essa abordagem é mais direta e pode ser suficiente em casos onde você tem certeza de que não precisará de lógica adicional ao acessar o atributo. No entanto, como você mencionou, se a classe evoluir e precisar de regras de negócio adicionais, você pode acabar precisando refatorar o código para reintroduzir getters.

A escolha entre essas duas abordagens depende muito do contexto e da expectativa de evolução da classe. Se você espera que a classe possa crescer ou mudar, private readonly com getters pode oferecer mais flexibilidade. Se o modelo é estável e não espera mudanças, public readonly pode ser uma escolha mais simples e eficiente.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.