Aplicación SOLID de principios en PHP: ejemplos y mejores prácticas

Single Responsibility Principle(SRP)

Este principio establece que cada clase debe tener una sola responsabilidad. Enfatiza que una clase debe realizar una función específica y no tener demasiadas razones para cambiar.

Ejemplo: Gestión de la información de los usuarios y envío de notificaciones por correo electrónico.

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)

Este principio fomenta la extensión de la funcionalidad agregando código nuevo en lugar de modificar el código existente.

Ejemplo: Manejo de diferentes métodos de pago en una aplicación de comercio electró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 principio afirma que los objetos de una clase derivada deben ser sustituibles por objetos de la clase base sin afectar la corrección del programa.

Ejemplo: Manejo 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)

Este principio aconseja dividir las interfaces en otras más pequeñas para evitar obligar a las clases a implementar métodos que no necesitan.

Ejemplo: Interfaces para actualización y visualización de datos.

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

Dependency Inversion Principle(DIP)

Este principio sugiere usar la inyección de dependencia para administrar las dependencias.

Ejemplo: Uso de inyección de dependencia para administrar dependencias.

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

Recuerde que la aplicación de SOLID principios en PHP debe hacerse de manera flexible en función del propósito específico de su proyecto y su comprensión de SOLID PHP.