Ciekawy patent na Config, który nie jest ani plikiem ini/.env parsowanym przez nas, ani wykorzystaniem jakiejś zewnętrznej biblioteczki z composerem, ale naprawdę kreatywnym podejściem do tematu.

Autor posiada folder Config, a w nim plik app.php:

<?php
return [

    'app_name' => 'Bug Report App',
    'env' => 'local',
    'debug' => true,
    'log_path' => __DIR__ . '/../Logger',
];

W tym samym folderze ma także database.php:

<?php

return [

    'pdo' => [
        'driver' => 'mysql',
        'host' => 'localhost',
        'db_name' => 'bug_app',
        'db_username' => 'root',
        'db_user_password' => '',
        'default_fetch' => PDO::FETCH_OBJ,
    ],
    'mysqli' => [
        'host' => 'localhost',
        'db_name' => 'bug_app',
        'db_username' => 'root',
        'db_user_password' => '',
        'default_fetch' => MYSQLI_ASSOC,
    ],
];

Klasa config wygląda tak i jest genialna w swojej prostocie:

class Config
{

    public static function get(string $filename, string $key = null)
    {
        $fileContent = self::getFileContent($filename);
        if($key === null){
            return $fileContent;
        }
        return isset($fileContent[$key]) ? $fileContent[$key] : [];
    }

    public static function getFileContent(string $filename): array
    {
        $fileContent = [];
        try{
            $path = realpath(sprintf(__DIR__ . '/../Configs/%s.php', $filename));
           if(file_exists($path)) {
               $fileContent = require $path;
           }
        }catch (\Throwable $exception){
            throw new NotFoundException(
              sprintf('The specified file: %s was not found', $filename)
            );
        }
        return $fileContent;
    }

Całkiem sprytne podejście do tematu.