A metodologia SOLID é um conjunto de cinco princípios fundamentais que tornam o código mais limpo, flexível e fácil de manter. No desenvolvimento em PHP, aplicá-los ajuda a reduzir erros, melhorar a legibilidade e permitir que sistemas cresçam sem quebras inesperadas.
A letra S do SOLID signigica Single Responsibility Principle e tem a abreviatura (SRP)
O próprio nome Single Responsibility Principle já diz: é o princípio da responsabilidade única, então cada classe de nosso sistema deverá ter uma única responsabilidade.
Abaixo vamos demonstrar as diferenças, veja:

O script sem o Single Responsibility Principle
Explodindo o exemplo dado como “errado“, vemos:
- que a class Usuario contem o método (function) salvar,
- sem precisar de muita explicação, vemos que fica estranho, pois para aplicar o salvar(),
- a “public function salvar ()” este necessitaria de configurações de coneção com banco ou apontamentos a endpoint’ de api, bagunçando tudo – mistrurando responsabilidades.
- no mesmo sentido a “public function enviarEmail ()“, onde o próprio nome dita: vai enviar um e-mail. Que no caso é uma responsabilidade estranha à administração de dados atinentes ao usuário (class Usuario)
Este é o ponto, separar tudo em seu devido lugar, sua devida responsabilidade única, que é exatamente o conceito de SINGLE, a letra ‘S’ do SOLID.
// 1) Classe User com múltiplas responsabilidades
class Usuario
{
public string $nome;
public string $email;
public function salvar() // responsabilidade 01
{
// Mistura lógica de persistência de dados
echo "Salvando {$this->nome} no banco...\n";
}
// responsabilidade 02 (enviar e-mail difere de Salvar)
public function enviarEmail(string $mensagem)
{
// Mistura lógica de envio de email
echo "Enviando email para {$this->email}: $mensagem\n";
}
}
// Uso problemático
$usuario = new Usuario();
$usuario->nome = "João";
$usuario->email = "joao@email.com";
$usuario->salvar();
$usuario->enviarEmail("Bem-vindo!");
// Problema:
// A classe Usuario faz mais de uma coisa: gerencia dados,
// salva no banco e envia emails.
// Dificulta testes unitários, reuso de código e manutenção futura.
O script aplicando o Single Responsibility Principle
Vemos que a antes a class Usuario estrapolava suas responsabilidades, incorporando funções como salvar e enviar e-mail.
Agora aplicando ao script o conceito de Single Responsibility Principle (SRP), ja vemos 03 classes separadas.
Perceba que o nome das classes já dá a ela sua devida resposabilidade. Ao nomear uma classe, se vc perceber que o nome ficou muito complexo, pode desconfiar que tem algum erro.
Ex: class ServicoEmail > function enviar ()
Neste exemplo da class ServicoEmail, é nitido que ele incorporará funções atinentes às tarefas relacionadas à e-mail. Assim, quando um comando venha a necessitar de enviar um e-mail a um determinado usuário ou a um envio em massa, basta usar essa classe ServicoEmail, a qual esta devidamente separada em sua responsabilidade única, que é serviços de e-mail.
class Usuario
{
public string $nome;
public string $email;
}
// 2) Classe responsável apenas pela persistência de dados
class RepositorioUsuario
{
public function salvar(Usuario $usuario)
{
echo "Salvando {$usuario->nome} no banco...\n";
// Aqui poderia ter código real de INSERT ou UPDATE no banco
}
}
// 3) Classe responsável apenas pelo envio de emails
class ServicoEmail
{
public function enviar(Usuario $usuario, string $mensagem)
{
echo "Enviando email para {$usuario->email}: $mensagem\n";
// Aqui poderia usar mail(), PHPMailer, etc.
}
}
// Uso correto
$usuario = new Usuario();
$usuario->nome = "João";
$usuario->email = "joao@email.com";
$repositorio = new RepositorioUsuario();
$repositorio->salvar($usuario);
echo '<hr>';
$servicoEmail = new ServicoEmail();
$servicoEmail->enviar($usuario, "Bem-vindo!");
Conclusão
A letra S do SOLID é de fácil entendimento e de fácil aplicação. Dê a uma classe uma única responsabilidade, pronto, acabou, sem rodeios.
Veja os arquivos em nosso git https://github.com/Tellys/solid-principles/tree/f7a3520b5b3150639644354bb036d8746c33fac8/Simples%20Single%20Responsibility%20Principle%20(SRP)
