Aplicando SOLID Princípios em PHP: Exemplos e Melhores Práticas

Single Responsibility Principle(SRP)

Este princípio afirma que cada classe deve ter uma única responsabilidade. Ele enfatiza que uma classe deve executar uma função específica e não ter muitos motivos para mudar.

Exemplo: gerenciamento de informações do usuário e envio de notificações por e-mail.

class UserManager {  
    public function createUser($userData) {  
        // Logic for creating a user  
    }  
}  
  
class EmailService {  
    public function sendEmail($emailData) {  
        // Logic for sending an email  
    }  
}  

Open/Closed Principle(OCP)

Esse princípio incentiva a extensão da funcionalidade adicionando um novo código em vez de modificar o código existente.

Exemplo: Lidar com diferentes métodos de pagamento em um aplicativo de comércio eletrônico.

interface PaymentProcessor {  
    public function processPayment();  
}  
  
class CreditCardPaymentProcessor implements PaymentProcessor {  
    public function processPayment() {  
        // Logic for processing credit card payment  
    }  
}  
  
class PayPalPaymentProcessor implements PaymentProcessor {  
    public function processPayment() {  
        // Logic for processing PayPal payment  
    }  
}  

Liskov Substitution Principle(LSP)

Este princípio afirma que objetos de uma classe derivada devem ser substituíveis por objetos da classe base sem afetar a correção do programa.

Exemplo: Gerenciamento de formas geométricas.

abstract class Shape {  
    abstract public function area();  
}  
  
class Rectangle extends Shape {  
    public function area() {  
        return $this->width * $this->height;  
    }  
}  
  
class Square extends Shape {  
    public function area() {  
        return $this->side * $this->side;  
    }  
}  

Interface Segregation Principle(ISP)

Esse princípio aconselha dividir as interfaces em interfaces menores para evitar forçar as classes a implementar métodos de que não precisam.

Exemplo: Interfaces para atualização e exibição de dados.

interface UpdateableFeature {  
    public function updateFeature();  
}  
  
interface DisplayableFeature {  
    public function displayFeature();  
}  

Dependency Inversion Principle(DIP)

Esse princípio sugere o uso de injeção de dependência para gerenciar dependências.

Exemplo: Usando injeção de dependência para gerenciar dependências.

class OrderProcessor {  
    private $dbConnection;  
    private $emailService;  
  
    public function __construct(DatabaseConnection $dbConnection, EmailService $emailService) {  
        $this->dbConnection = $dbConnection;  
        $this->emailService = $emailService;  
    }  
}  

Lembre-se que a aplicação de SOLID princípios em PHP deve ser feita de forma flexível com base no propósito específico do seu projeto e sua compreensão de SOLID PHP.