open-feature / split-provider
The Split provider package for OpenFeature
Requires
- php: ^8
- open-feature/sdk: ^2.0
- splitsoftware/split-sdk-php: ^7.1
Requires (Dev)
- ergebnis/composer-normalize: ^2.25
- friendsofphp/php-cs-fixer: ^3.13
- hamcrest/hamcrest-php: ^2.0
- mdwheele/zalgo: ^0.3.1
- mikey179/vfsstream: v1.6.11
- mockery/mockery: ^1.5
- phan/phan: ^5.4
- php-parallel-lint/php-console-highlighter: ^1.0
- php-parallel-lint/php-parallel-lint: ^1.3
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ~1.10.0
- phpstan/phpstan-mockery: ^1.0
- phpstan/phpstan-phpunit: ^1.1
- psalm/plugin-mockery: ^0.11.0
- psalm/plugin-phpunit: ^0.18.0
- ramsey/coding-standard: ^2.0.3
- ramsey/composer-repl: ^1.4
- ramsey/conventional-commits: ^1.3
- roave/security-advisories: dev-latest
- spatie/phpunit-snapshot-assertions: ^4.2
- vimeo/psalm: ~4.30.0
README
Overview
Split is a feature delivery platform that powers feature flag management, software experimentation, and continuous delivery. This repository and package provides the client side code for interacting with it via the OpenFeature PHP SDK.
This package also builds on various PSRs (PHP Standards Recommendations) such as the Logger interfaces (PSR-3) and the Basic and Extended Coding Standards (PSR-1 and PSR-12).
Installation
composer require open-feature/split-provider
Usage
The SplitProvider
client constructor takes a single optional argument with 3 fields, their default values correspond to the default arguments supplied to the flagd server:
$splitConfig = [ 'cache' => [ 'adapter' => 'predis', 'parameters' => [ 'scheme' => 'tcp', 'host' => getenv('REDIS_HOST'), 'port' => getenv('REDIS_PORT'), 'timeout' => 881, ], 'options' => [ 'prefix' => '', ], ], ]; $splitApiKey = getenv('SPLIT_API_KEY'); $provider = new SplitProvider($splitApiKey, $splitConfig);
For more information on the configuration options, please see the Split PHP SDK documentation on Configuration.
Resolving values requires the use of the EvaluationContext, where you can provide the
targetingKey` for the evaluation (the identifier which represents the user/account/etc.)
$client = $api->getClient('split-example', '1.0.0'); $featureEnabled = $client->getBooleanDetails('dev.openfeature.example_flag', false, new EvaluationContext('user-id'), null); if ($featureEnabled) { // do new logic here } else { // do old logic here }
You can provide more elaborate attributes to resolve values, but the values must conform to the requirements of the Split SDK. Information on what attributes are allowed can be found in the Attributes section of the PHP SDK documentation.
$client = $api->getClient('split-example', '1.0.0'); $featureEnabled = $client->getBooleanDetails('dev.openfeature.example_flag', false, new EvaluationContext('user-id', [ 'plan_type' => 'growth', 'registered_date' => (new DateTime('now', new DateTimeZone('UTC')))->getTimestamp(), 'deal_size' => 10000, 'paying_customer' => True, 'permissions' => ['gold','silver','platinum'], ]), null); if ($featureEnabled) { // do new logic here } else { // do old logic here }
Development
PHP Versioning
This library targets PHP version 8.0 and newer. As long as you have any compatible version of PHP on your system you should be able to utilize the OpenFeature SDK.
This package also has a .tool-versions
file for use with PHP version managers like asdf
.
Installation and Dependencies
Install dependencies with composer install
. composer install
will update the composer.lock
with the most recent compatible versions.
We value having as few runtime dependencies as possible. The addition of any dependencies requires careful consideration and review.
Testing
Run tests with composer run test
.