Skip to content

Added fluent-style static constructor helper

Thomas Flori requested to merge github/fork/kamermans/master into master

Created by: kamermans

Instantiating a new option and setting its properties in one step is currently not possible for most versions of PHP, since you can't put -> after constructing an object via new .... This means that new Option('a', null)->setDefaultValue(10) will not work.

Here's the nasty mess I had to use for my application:

$options = array();

$opt = new Option('s', 'strict', Getopt::REQUIRED_ARGUMENT);
$options[] = $opt->setDescription('Use strict comparison of capability values')
    ->setDefaultValue('true')
    ->setValidation(function($value) {
        return in_array($value, array('true', 'false'));
    });

$opt = new Option('d', 'details', Getopt::REQUIRED_ARGUMENT);
$options[] = $opt->setDescription('Include lists of all devices and capabilities instead of just the counts')
    ->setDefaultValue('false')
    ->setValidation(function($value) {
        return in_array($value, array('true', 'false'));
    });

$getopt = new Getopt($options);

To improve things, I've added a public static function create() which constructs a new Option object and returns it. This lets me improve my syntax as follows:

$getopt = new Getopt(array(
    Option::create('s', 'strict', Getopt::REQUIRED_ARGUMENT)
        ->setDescription('Use strict comparison of capability values')
        ->setDefaultValue('true')
        ->setValidation(function($value) {
            return in_array($value, array('true', 'false'));
        }),

    Option::create('d', 'details', Getopt::REQUIRED_ARGUMENT)
        ->setDescription('Include lists of all devices and capabilities instead of just the counts')
        ->setDefaultValue('false')
        ->setValidation(function($value) {
            return in_array($value, array('true', 'false'));
        }),
));

Merge request reports