What strategies can be employed to simplify the code customization process for end-users, such as installers and private individuals, while still utilizing object-oriented principles in PHP frameworks?

When customizing code for end-users in PHP frameworks, one strategy to simplify the process is to utilize configuration files that allow users to easily modify settings without directly altering the code. This approach maintains the principles of object-oriented programming by encapsulating configuration options within classes or objects, making it easier for users to make changes without affecting the underlying codebase.

// config.php

class Config {
    public static $settings = [
        'database' => [
            'host' => 'localhost',
            'username' => 'root',
            'password' => 'password',
            'database_name' => 'my_database'
        ],
        'app' => [
            'debug' => true,
            'timezone' => 'UTC'
        ]
    ];
}

// index.php

require_once 'config.php';

echo Config::$settings['database']['host']; // Output: localhost

Config::$settings['app']['debug'] = false;
echo Config::$settings['app']['debug']; // Output: false