Simple class to provide config using getenv
function with prefix.
Compatibility: tested on PHP 7.1, PHP 8.1
Using composer:
composer require horat1us/environment-config
Implement your own config class:
<?php
namespace App;
use Horat1us\Environment;
class Config extends Environment\Config {
public function getTimeout(): int
{
return $this->getEnv($key = 'APP_TIMEOUT', $default = 10);
}
public function getSlow(): string
{
// default can be instance of \Closure or callable array, like [$this, 'calculate']
return $this->getEnv($key = 'APP_KEY', $default = function(): string {
return 'some-string'; // slow operation, may be fetching from DB
});
}
public function getNullValue(): ?string
{
/**
* if you want to return null instead of throwing exceptio
* if no environment variable found
*/
return $this->getEnv('KEY', [$this, 'null']);
}
public function getName(): string {
return $this->getEnv($key = 'APP_NAME');
}
}
then use it:
<?php
use App;
$config = new App\Config("PREFIX_");
$config->getTimeout(); // 10
putenv("PREFIX_APP_TIMEOUT=5");
$config->getTimeout(); // 5
$config->getSlow(); // some-string
// MissingEnvironmentException will be thrown because no default value provided
$config->getName();
You can define your config keys/methods using MagicTrait:
<?php
use Horat1us\Environment;
class Config {
use Environment\MagicTrait {
getEnvironment as public getHost;
}
protected function getEnvironmentKeyPrefix(): string {
return 'TEST_';
}
}
$config = new Config;
$config->getHost(); // TEST_HOST environment key will be used to get value
Note: your environment getters should be named with prefix get and have camel case name