69 lines
1.5 KiB
PHP
69 lines
1.5 KiB
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace OpenTelemetry\SDK\Common\Configuration\Resolver;
|
||
|
|
||
|
use OpenTelemetry\SDK\Common\Configuration\Configuration;
|
||
|
|
||
|
/**
|
||
|
* @interal
|
||
|
*/
|
||
|
class CompositeResolver
|
||
|
{
|
||
|
// @var array<ResolverInterface>
|
||
|
private array $resolvers = [];
|
||
|
|
||
|
public static function instance(): self
|
||
|
{
|
||
|
static $instance;
|
||
|
$instance ??= new self([
|
||
|
new PhpIniResolver(),
|
||
|
new EnvironmentResolver(),
|
||
|
]);
|
||
|
|
||
|
return $instance;
|
||
|
}
|
||
|
|
||
|
public function __construct($resolvers)
|
||
|
{
|
||
|
foreach ($resolvers as $resolver) {
|
||
|
$this->addResolver($resolver);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function addResolver(ResolverInterface $resolver): void
|
||
|
{
|
||
|
$this->resolvers[] = $resolver;
|
||
|
}
|
||
|
|
||
|
public function getResolvers(): array
|
||
|
{
|
||
|
return $this->resolvers;
|
||
|
}
|
||
|
|
||
|
public function resolve(string $variableName, $default = '')
|
||
|
{
|
||
|
foreach ($this->resolvers as $resolver) {
|
||
|
if ($resolver->hasVariable($variableName)) {
|
||
|
return $resolver->retrieveValue($variableName);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return Configuration::isEmpty($default)
|
||
|
? Configuration::getDefault($variableName)
|
||
|
: $default;
|
||
|
}
|
||
|
|
||
|
public function hasVariable(string $variableName): bool
|
||
|
{
|
||
|
foreach ($this->resolvers as $resolver) {
|
||
|
if ($resolver->hasVariable($variableName)) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|