1
resposta

Dúvida sobre __get e __set em relação ao princípio de encapsulamento

Fala galera do forum!

Tenho uma dúvida sobre os métodos mágios __get e __set.

"Esses métodos mágicos não ferem o princípio do encapsulamento? Se meus atributos estão como privados é porque não é para serem acessados diretamente."

Essa foi uma pergunta de uma Aluna que eu acabei lendo, e fiquei com dúvida também.

Conseguir recuperar o atributo mesmo que em modo readonly, entra em conflito com o encapsulamento? E no caso de alterar o atributo, seria uma boa prática em relação ao encapsulamento?

1 resposta

Olá, Matheus! Tudo bem?

Desculpa a demora por um retorno.

Ótima pergunta!

No encapsulamento, os dados de uma classe são mantidos privados (ou protegidos) e só podem ser acessados ou modificados através de métodos específicos, chamados de métodos de acesso ou métodos getter e setter. Esses métodos permitem que as operações sobre os dados sejam realizadas de maneira controlada, aplicando validações, restrições e regras específicas definidas pela classe. Ou seja, o objetivo principal do principio de encapsulamento é controlar o acesso aos atributos de uma classe, garantindo que eles sejam manipulados de forma consistente.

Ao utilizar os métodos mágicos __get e __set, estamos permitindo o acesso e modificação desses atributos, mesmo que eles sejam privados. No entanto, é importante ter em mente que esses métodos devem ser implementados de acordo com as regras de negócio da aplicação.

Por exemplo, se possuímos um atributo que deve ser apenas lido e não modificado, podemos implementar o método __get para permitir o acesso a esse atributo, mas não implementar o método __set, evitando assim a modificação indesejada.

Já no caso de alterar o atributo, é importante avaliar se essa é uma ação que deve ser permitida externamente ou se deve ser controlada internamente pela classe. Se a alteração do atributo for permitida, podemos implementar o método __set para realizar as validações necessárias antes de efetuar a modificação.

Em resumo, o objetivo do encapsulamento é proteger os dados dentro da classe, fornecendo um controle estrito sobre como esses dados são acessados e modificados. Dessa forma, os métodos mágicos __get e __set são uma alternativa para o acesso e manipulação não diretos aos atributos privados, protegendo-os em circunstâncias gerais, mas permitindo o seu acesso e/ou manipulação de acordo com regras especificas, dependendo do que queremos como aplicação.

Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

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