PHP code example of code-distortion / options

1. Go to this page and download the library: Download code-distortion/options 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/ */

    

code-distortion / options example snippets


use CodeDistortion\Options\Options;

$results = Options::new('sendEmails sendSms !sendSlack plan=gold value=123.45')->all();

// [ 'sendEmails' => true,
//   'sendSms' => true,
//   'sendSlack' => false,
//   'plan' => 'gold',
//   'value' => 123.45 ]

use CodeDistortion\Options\Options;

$results = Options::new('sendEmails sendSms !sendSlack')->all();
// or
$results = Options::new()->options('sendEmails sendSms !sendSlack')->all();

// [ 'sendEmails' => true,
//   'sendSms' => true,
//   'sendSlack' => false ]

use CodeDistortion\Options\Options;

$options = Options::new('sendEmails sendSms !sendSlack');
// or
$options = Options::new()->options('sendEmails sendSms !sendSlack');

$has = $options->has('sendEmails');   // true
$has = $options->has('sendTweet');    // false
$value = $options->get('sendEmails'); // true
$value = $options->get('sendTweet');  // null

$myOptions = 'sendEmails sendSms sendSlack';
$extraOptions = '!sendSms';
$options = Options::new()
    ->options($myOptions)
    ->amendOptions($extraOptions);

$options = Options::new()
    ->defaults('sendEmails sendSms sendSlack')
    ->options('!sendEmails');

$options->get('sendEmails'); // false
$options->get('sendSms');    // true

$defaults = 'sendEmails sendSms sendSlack';
$quietModeDefaults = '!sendSms';
$options = Options::new()
    ->defaults($defaults)
    ->amendDefaults($quietModeDefaults);

// the 'sendTweet' option is allowed because restrictUnexpected() was not called
$options = Options::new()
    ->defaults('sendEmails sendSms !sendSlack')
    ->options('sendTweet');

// InvalidOptionException: "The option "sendTweet" was not expected"
$options = Options::new()
    ->defaults('sendEmails sendSms !sendSlack')
    ->restrictUnexpected()
    ->options('sendTweet');

$validatorCallback = function (string $name, $value, bool $wasExpected): bool {
    return is_bool($value); // ensure the value is a boolean
};

// sendEmails is ignored because it's not a boolean
Options::new()
    ->validator($validatorCallback)
    ->defaults('sendEmails sendSms !sendSlack')
    ->options('sendEmails=yes');

// InvalidOptionException: "The option "sendEmails" and/or it's value "yes" are not allowed"
Options::new()
    ->validator($validatorCallback, true) // <<<
    ->defaults('sendEmails sendSms !sendSlack')
    ->options('sendEmails=yes');

// instantiate
$options = new Options();
$options = new Options($myOptions);
$options = Options::new();
$options = Options::new($myOptions);

// call and chain any of these, in any order
$options->options($myOptions)
    ->amendOptions($extraOptions)
    ->defaults($defaults)
    ->amendDefaults($extraDefaults)
    ->restrictUnexpected()
    ->validator($validatorCallback);

// then consult your Options instance like normal
$results = $options->all();
$has = $options->has('sendEmails');
$value = $options->get('sendEmails');

'myVal' // ['myVal' => true]

// with modifiers
'+myVal' // ['myVal' => true]
'-myVal' // ['myVal' => false]
'!myVal' // ['myVal' => false]

// special values
'myVal=true'   // ['myVal' => true] (boolean true)
'myVal=false'  // ['myVal' => false] (boolean false)
'myVal=null'   // ['myVal' => null] (actual null)
'myVal=100'    // ['myVal' => 100] (an integer)
'myVal=123.45' // ['myVal' => 123.45] (a float)

// strings
'myVal='          // ['myVal' => '']
'myVal=somevalue' // ['myVal' => 'somevalue']

// quoted value strings
'myVal="true"'           // ['myVal' => 'true'] (not a boolean)
'myVal="some value"'     // ['myVal' => 'some value']
'myVal="some \"value\""' // ['myVal' => 'some "value"']
"myVal='some value'"     // ['myVal' => 'some value']
"myVal='some \'value\''" // ['myVal' => "some 'value'"]
"myVal=\"new\nline\""    // ['myVal' => "new\nline"]

// quoted key strings
'"my val"=true'     // ['my val' => true]
'"my \"val\""=true' // ['my "val"' => true]
"'my val'=true"     // ['my val' => true]
"'my \'val\''=true" // ["my 'val'" => true]

'myVal1=abc +myVal2 -myVal3'   // ['myVal1' => 'abc', 'myVal2' => true, 'myVal3' => false']
'myVal1=abc,+myVal2,-myVal3'   // ['myVal1' => 'abc', 'myVal2' => true, 'myVal3' => false']
'myVal1=abc, +myVal2, -myVal3' // ['myVal1' => 'abc', 'myVal2' => true, 'myVal3' => false']

['myVal' => true]
['myVal' => false]
['myVal' => 'some value']
['my val' => 'some value']
// etc