PHP code example of neunerlei / options
1. Go to this page and download the library: Download neunerlei/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/ */
neunerlei / options example snippets
use Neunerlei\Options\Options;
function myFunc(array $options = []){
// Apply the options
$options = Options::make($options, [
"foo" => 123,
"bar" => null,
]);
print_r($options);
}
myFunc(); // Prints: ["foo" => 123, "bar" => null]
myFunc(["bar" => "baz"]); // Prints: ["foo" => 123, "bar" => "baz"]
myFunc(["baz" => 234]); // This will cause an exception, because the key "baz" is not known
use Neunerlei\Options\Options;
$options = Options::make($options, [
"foo" => [["my" => "defaultValue"]]
]);
use Neunerlei\Options\Options;
// Simple value default
$options = Options::make($options, [
"foo" => [
"default" => 123
]
]);
// Closure result value default
$options = Options::make($options, [
"foo" => [
"default" => function($key, $options, $node, $context){
return 123;
}
]
]);
use Neunerlei\Options\Options;
// Simple types
$options = Options::make($options, [ "foo" => [ "type" => "string" ] ]);
$options = Options::make($options, [ "foo" => [ "type" => "number" ] ]);
$options = Options::make($options, [ "foo" => [ "type" => [ "number", "string" ] ] ]);
// Class types
interface AI {};
class A implements AI {}
class B extends A {}
$options = Options::make(["foo" => new A()], [ "foo" => [ "type" => [A::class]]]); // OK -> Same class
$options = Options::make(["foo" => new B()], [ "foo" => [ "type" => [A::class]]]); // OK -> A is the parent
$options = Options::make(["foo" => new B()], [ "foo" => [ "type" => [AI::class]]]); // OK -> AI is implemented by the parent
$options = Options::make(["foo" => new A()], [ "foo" => [ "type" => [B::class]]]); // FAIL
use Neunerlei\Options\Options;
$options = Options::make($options, [
"foo" => [
"preFilter" => function($incomingValue, $key, $options, $node, $context){
if(is_string($incomingValue)) {return (int)$incomingValue;}
return $incomingValue;
}
]
]);
use Neunerlei\Options\Options;
$options = Options::make($options, [
"foo" => [
"type" => "int",
"filter" => function(int $incomingValue, $key, $options, $node, $context){
return empty($incomingValue) ? 1 : $incomingValue;
}
]
]);
use Neunerlei\Options\Options;
$options = Options::make($options, [
"foo" => [
"type" => "int",
"validator" => function(int $incomingValue, $key, $options, $node, $context){
return TRUE; // Success!
return FALSE; // Failed
return "Failed to validate something!"; // Failed with custom error message
return [123, 234]; // Let the "values" validator decide (see: validator (array))
}
]
]);
use Neunerlei\Options\Options;
$options = Options::make($options, [
"foo" => [
"type" => "string",
"validator" => '~^0-9$~'
]
]);
use Neunerlei\Options\Options;
$options = Options::make($options, [
"foo" => [
"type" => "int",
"validator" => [123, 234] // Only 123 or 234 are allowed values
]
]);
use Neunerlei\Options\Options;
$options = Options::make([], [
"foo" => [
"type" => "array",
"default" => [],
"children" => [
"childFoo" => 123,
"KongFoo" => [
"type" => "string",
"default" => "foo!"
]
]
]
]);
// $options will look like:
// [
// "foo" => [
// "childFoo" => 123,
// "KongFoo" => "foo!"
// ]
// ]
use Neunerlei\Options\Options;
$options = [
"foo" => [
["childFoo" => 234],
["KongFoo" => "bar :D"]
]
];
$options = Options::make($options, [
"foo" => [
"type" => "array",
"default" => [],
"children" => [
// This asterisk defines, that the children are repeatable
"*" => [
"childFoo" => 123,
"KongFoo" => [
"type" => "string",
"default" => "foo!"
]
]
]
]
]);
// $options will look like:
// [
// "foo" => [
// ["childFoo" => 234, "KongFoo" => "foo!"],
// ["childFoo" => 123, "KongFoo" => "bar :D"]
// ]
// ];
use Neunerlei\Options\Options;
$options = [
"foo" => [
'HOW',
'ARE',
'YOU'
]
];
$options = Options::make($options, [
"foo" => [
"type" => "array",
"default" => [],
"children" => [
// This hashtag defines, that we expect repeatable children of the same type
"#" => [
'type' => 'string',
'filter' => function(string $v): string{
return strtolower($v);
}
'validator' => ['how', 'are', 'you']
]
]
]
]);
// $options will look like:
// [
// "foo" => [
// 'how', 'are', 'you'
// ]
// ];
use Neunerlei\Options\Options;
function myFunc(array $options = []){
// Apply the options
$options = Options::make($options, [
"foo" => [
"type" => "bool",
"default" => false
]
]);
print_r($options);
}
myFunc(); // Prints: ["foo" => false]
myFunc(["foo"]); // Prints: ["foo" => true]
myFunc(["foo" => true]); // Prints: ["foo" => true]
use Neunerlei\Options\Options;
function myFunc($value, $anOption = null){
$anOption = Options::makeSingle("anOption", $anOption, [
"type" => ["string"],
"default" => "foo",
]);
}