What are some best practices for structuring and organizing OOP code in PHP to ensure reusability and maintainability?

To ensure reusability and maintainability in object-oriented PHP code, it is important to follow best practices such as using proper class and method naming conventions, implementing SOLID principles, utilizing design patterns, and organizing code into logical modules and namespaces.

<?php

// Example of organizing code into logical namespaces and classes

namespace MyNamespace;

class MyClass {
    public function myMethod() {
        // Method implementation
    }
}

// Example of implementing SOLID principles and design patterns

interface Logger {
    public function log($message);
}

class FileLogger implements Logger {
    public function log($message) {
        // Log message to a file
    }
}

class UserManager {
    private $logger;

    public function __construct(Logger $logger) {
        $this->logger = $logger;
    }

    public function createUser($username, $password) {
        // Create user logic
        $this->logger->log('User created: ' . $username);
    }
}

$fileLogger = new FileLogger();
$userManager = new UserManager($fileLogger);
$userManager->createUser('john_doe', 'password123');

?>