How do you separate the logic layer from the persistence layer in PHP applications?

To separate the logic layer from the persistence layer in PHP applications, you can use the Repository pattern. This pattern involves creating separate classes for handling database operations (persistence layer) and business logic (logic layer). By doing this, you can easily switch out the database implementation without affecting the logic layer, making your code more modular and maintainable.

// Persistence layer (Repository)
class UserRepository {
    public function getUserById($id) {
        // Database query to retrieve user by ID
    }

    public function saveUser($user) {
        // Database query to save user data
    }
}

// Logic layer
class UserLogic {
    private $userRepository;

    public function __construct(UserRepository $userRepository) {
        $this->userRepository = $userRepository;
    }

    public function getUserById($id) {
        return $this->userRepository->getUserById($id);
    }

    public function saveUser($user) {
        // Add business logic before saving user
        $this->userRepository->saveUser($user);
    }
}

// Implementation
$userRepository = new UserRepository();
$userLogic = new UserLogic($userRepository);

$user = $userLogic->getUserById(1);
$user->name = "John Doe";
$userLogic->saveUser($user);