1. Go to this page and download the library: Download open-feature/sdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
open-feature / sdk example snippets
use OpenFeature\OpenFeatureAPI;
use OpenFeature\Providers\Flagd\FlagdProvider;
function example()
{
$api = OpenFeatureAPI::getInstance();
// configure a provider
$api->setProvider(new FlagdProvider());
// create a client
$client = $api->getClient();
// get a bool flag value
$client->getBooleanValue('v2_enabled', false);
}
use OpenFeature\OpenFeatureClient;
class MyClass
{
private OpenFeatureClient $client;
public function __construct()
{
$this->client = OpenFeatureAPI::getInstance()->getClient('MyClass');
}
public function booleanExample(): UI
{
// Should we render the redesign? Or the default webpage?
if ($this->client->getBooleanValue('redesign_enabled', false)) {
return render_redesign();
}
return render_normal();
}
public function stringExample(): Template
{
// Get the template to load for the custom new homepage
$template = $this->client->getStringValue('homepage_template', 'default-homepage.html');
return render_template($template);
}
public function numberExample(): array
{
// How many modules should we be fetching?
$count = $this->client->getIntegerValue('module-fetch-count', 4);
return fetch_modules($count);
}
public function structureExample(): HomepageModule
{
$obj = $this->client->getObjectValue('hero-module', $previouslyDefinedDefaultStructure);
return HomepageModuleBuilder::new()
->title($obj->getValue('title'))
->body($obj->getValue('description'))
->build();
}
}
// add a value to the global context
$api = OpenFeatureAPI::getInstance();
$api->setEvaluationContext(new EvaluationContext('targetingKey', ['myGlobalKey' => 'myGlobalValue']));
// add a value to the client context
$client = $api->getClient();
$client->setEvaluationContext(new EvaluationContext('targetingKey', ['myClientKey' => 'myClientValue']));
// add a value to the invocation context
$context = new EvaluationContext('targetingKey', ['myInvocationKey' => 'myInvocationValue']);
$boolValue = $client->getBooleanValue('boolFlag', false, $context);
// add a hook globally, to run on all evaluations
$api = OpenFeatureAPI::getInstance();
$api->addHook(new ExampleGlobalHook());
// add a hook on this client, to run on all evaluations made by this client
$client = $api->getClient();
$client->addHook(new ExampleClientHook());
// add a hook for this evaluation only
$value = $client->getBooleanValue("boolFlag", false, $context, new EvaluationOptions([new ExampleInvocationHook()]));
$api = OpenFeatureAPI::getInstance();
$logger = new FancyLogger();
$defaultLoggerClient = $api->getClient('default-logger');
$api->setLogger(new CustomLogger());
$customLoggerClient = $api->getClient('custom-logger');
$overrideLoggerClient = $api->getClient('override-logger');
$overrideLoggerClient->setLogger($logger);
// now let's do some evaluations with these!
$defaultLoggerClient->getBooleanValue('A', false);
// uses default logger in the SDK
$customLoggerClient->getBooleanValue('B', false);
// uses the CustomLogger set in the API before the client was made
$overrideLoggerClient->getBooleanValue('C', false);
// uses the FancyLogger set directly on the client
declare(strict_types=1);
namespace OpenFeature\Example\Providers;
use OpenFeature\implementation\common\Metadata;
use OpenFeature\interfaces\common\Metadata as IMetadata;
use OpenFeature\interfaces\flags\EvaluationContext;
use OpenFeature\interfaces\hooks\Hook;
use OpenFeature\interfaces\provider\Provider;
use OpenFeature\interfaces\provider\ResolutionDetails;
class ExampleProviderImplementation implements Provider
{
public function setLogger(LoggerInterface $logger): void
{
$this->logger = $logger;
// or, utilize the OpenFeature\interfaces\common\LoggerAwareTrait
}
/**
* @return Hook[]
*/
public function getHooks(): array
{
return $this->hooks; // implement according to the OpenFeature specification
}
/**
* Returns the metadata for the current resource
*/
public function getMetadata(): IMetadata
{
return new Metadata(self::class);
}
public function resolveBooleanValue(string $flagKey, bool $defaultValue, ?EvaluationContext $context = null): ResolutionDetails
{
// resolve some ResolutionDetails
}
public function resolveStringValue(string $flagKey, string $defaultValue, ?EvaluationContext $context = null): ResolutionDetails
{
// resolve some ResolutionDetails
}
public function resolveIntegerValue(string $flagKey, int $defaultValue, ?EvaluationContext $context = null): ResolutionDetails
{
// resolve some ResolutionDetails
}
public function resolveFloatValue(string $flagKey, float $defaultValue, ?EvaluationContext $context = null): ResolutionDetails
{
// resolve some ResolutionDetails
}
/**
* @inheritdoc
*/
public function resolveObjectValue(string $flagKey, array $defaultValue, ?EvaluationContext $context = null): ResolutionDetails
{
// resolve some ResolutionDetails
}
}
declare(strict_types=1);
namespace OpenFeature\Example\Providers;
use OpenFeature\interfaces\flags\EvaluationContext;
use OpenFeature\interfaces\provider\ResolutionDetails;
class ExampleProviderExtension extends AbstractProvider
{
protected static string $NAME = self::class;
public function resolveBooleanValue(string $flagKey, bool $defaultValue, ?EvaluationContext $context = null): ResolutionDetailsInterface
{
// resolve some ResolutionDetails
}
public function resolveStringValue(string $flagKey, string $defaultValue, ?EvaluationContext $context = null): ResolutionDetailsInterface
{
// resolve some ResolutionDetails
}
public function resolveIntegerValue(string $flagKey, int $defaultValue, ?EvaluationContext $context = null): ResolutionDetailsInterface
{
// resolve some ResolutionDetails
}
public function resolveFloatValue(string $flagKey, float $defaultValue, ?EvaluationContext $context = null): ResolutionDetailsInterface
{
// resolve some ResolutionDetails
}
/**
* @inheritdoc
*/
public function resolveObjectValue(string $flagKey, array $defaultValue, ?EvaluationContext $context = null): ResolutionDetailsInterface
{
// resolve some ResolutionDetails
}
}
declare(strict_types=1);
namespace OpenFeature\Example\Hooks;
use OpenFeature\interfaces\flags\EvaluationContext;
use OpenFeature\interfaces\flags\FlagValueType;
use OpenFeature\interfaces\hooks\Hook;
use OpenFeature\interfaces\hooks\HookContext;
use OpenFeature\interfaces\hooks\HookHints;
use OpenFeature\interfaces\provider\ResolutionDetails;
class ExampleStringHookImplementation implements Hook
{
public function before(HookContext $context, HookHints $hints): ?EvaluationContext
{
}
public function after(HookContext $context, ResolutionDetails $details, HookHints $hints): void
{
}
public function error(HookContext $context, Throwable $error, HookHints $hints): void
{
}
public function finally(HookContext $context, HookHints $hints): void
{
}
public function supportsFlagValueType(string $flagValueType): bool
{
return $flagValueType === FlagValueType::STRING;
}
}
declare(strict_types=1);
namespace OpenFeature\Example\Hooks;
use OpenFeature\implementation\hooks\StringHook;
use OpenFeature\interfaces\flags\EvaluationContext;
use OpenFeature\interfaces\flags\FlagValueType;
use OpenFeature\interfaces\hooks\HookContext;
use OpenFeature\interfaces\hooks\HookHints;
use OpenFeature\interfaces\provider\ResolutionDetails;
class ExampleStringHookExtension extends StringHook
{
public function before(HookContext $context, HookHints $hints): ?EvaluationContext
{
}
public function after(HookContext $context, ResolutionDetails $details, HookHints $hints): void
{
}
public function error(HookContext $context, Throwable $error, HookHints $hints): void
{
}
public function finally(HookContext $context, HookHints $hints): void
{
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.