Getopt is a class to parse options for command-line applications.

Terminology: Argument: an element of the argv array. This may be part of an option, or it may be a non-option command-line argument. Flag: the letter or word set off by a '-' or '--'. Example: in '--output filename', '--output' is the flag. Parameter: the additional argument that is associated with the option. Example: in '--output filename', the 'filename' is the parameter. Option: the combination of a flag and its parameter, if any. Example: in '--output filename', the whole thing is the option.

The following features are supported:

  • Short flags like '-a'. Short flags are preceded by a single dash. Short flags may be clustered e.g. '-abc', which is the same as '-a' '-b' '-c'.
  • Long flags like '--verbose'. Long flags are preceded by a double dash. Long flags may not be clustered.
  • Options may have a parameter, e.g. '--output filename'.
  • Parameters for long flags may also be set off with an equals sign, e.g. '--output=filename'.
  • Parameters for long flags may be checked as string, word, or integer.
  • Automatic generation of a helpful usage message.
  • Signal end of options with '--'; subsequent arguments are treated as non-option arguments, even if they begin with '-'.
  • Raise exception Zend\Console\Exception* in several cases when invalid flags or parameters are given. Usage message is returned in the exception object.

The format for specifying options uses a PHP associative array. The key is has the format of a list of pipe-separated flag names, followed by an optional '=' to indicate a required parameter or '-' to indicate an optional parameter. Following that, the type of parameter may be specified as 's' for string, 'w' for word, or 'i' for integer.

Examples:

  • 'user|username|u=s' this means '--user' or '--username' or '-u' are synonyms, and the option requires a string parameter.
  • 'p=i' this means '-p' requires an integer parameter. No synonyms.
  • 'verbose|v-i' this means '--verbose' or '-v' are synonyms, and they take an optional integer parameter.
  • 'help|h' this means '--help' or '-h' are synonyms, and they take no parameter.

The values in the associative array are strings that are used as brief descriptions of the options when printing a usage message.

The simpler format for specifying options used by PHP's getopt() function is also supported. This is similar to GNU getopt and shell getopt format.

Example: 'abc:' means options '-a', '-b', and '-c' are legal, and the latter requires a string parameter.

package Default

 Methods

The constructor takes one to three parameters.

__construct(array $rules, array $argv = null, array $getoptConfig = array()

The first parameter is $rules, which may be a string for gnu-style format, or a structured array for Zend-style format.

The second parameter is $argv, and it is optional. If not specified, $argv is inferred from the global argv.

The third parameter is an array of configuration parameters to control the behavior of this instance of Getopt; it is optional.

Parameters

$rules

array

$argv

array

$getoptConfig

array

Exceptions

\Zend\Console\Exception\InvalidArgumentException

Return the state of the option seen on the command line of the current application invocation. This function returns true, or the parameter to the option, if any. If the option was not given, this function returns null.

__get(string $key) : string

The magic __get method works in the context of naming the option as a virtual member of this class.

Parameters

$key

string

Returns

string

Test whether a given option has been seen.

__isset(string $key) : boolean

Parameters

$key

string

Returns

boolean

Set the value for a given option.

__set(string $key, string $value) 

Parameters

$key

string

$value

string

Return the current set of options and parameters seen as a string.

__toString() : string

Returns

string

Unset an option.

__unset(string $key) 

Parameters

$key

string

Define additional command-line arguments.

addArguments(array $argv) : \Zend\Console\Getopt

These are appended to those defined when the constructor was called.

fluent This method is part of a fluent interface and will return the same instance

Parameters

$argv

array

Exceptions

\Zend\Console\Exception\InvalidArgumentException When not given an array as parameter

Returns

\Zend\Console\Getopt

Define additional option rules.

addRules(array $rules) : \Zend\Console\Getopt

These are appended to the rules defined when the constructor was called.

fluent This method is part of a fluent interface and will return the same instance

Parameters

$rules

array

Returns

\Zend\Console\Getopt

getArguments()

getArguments() 

Return the state of the option seen on the command line of the current application invocation.

getOption(string $flag) : mixed

This function returns true, or the parameter value to the option, if any. If the option was not given, this function returns false.

Parameters

$flag

string

Returns

mixed

Return a list of options that have been seen in the current argv.

getOptions() : array

Returns

array

Return the arguments from the command-line following all options found.

getRemainingArgs() : array

Returns

array

Return a useful option reference, formatted for display in an error message.

getUsageMessage() : string

Note that this usage information is provided in most Exceptions generated by this class.

Returns

string

Parse command-line arguments and find both long and short options.

parse() : \Zend\Console\Getopt

Also find option parameters, and remaining arguments after all options have been parsed.

fluent This method is part of a fluent interface and will return the same instance

Returns

\Zend\Console\Getopt

Define aliases for options.

setAliases(array $aliasMap) : \Zend\Console\Getopt

The parameter $aliasMap is an associative array mapping option name (short or long) to an alias.

fluent This method is part of a fluent interface and will return the same instance

Parameters

$aliasMap

array

Exceptions

\Zend\Console\Exception\ExceptionInterface

Returns

\Zend\Console\Getopt

Define full set of command-line arguments.

setArguments(array $argv) : \Zend\Console\Getopt

These replace any currently defined.

fluent This method is part of a fluent interface and will return the same instance

Parameters

$argv

array

Exceptions

\Zend\Console\Exception\InvalidArgumentException When not given an array as parameter

Returns

\Zend\Console\Getopt

Define help messages for options.

setHelp(array $helpMap) : \Zend\Console\Getopt

The parameter $helpMap is an associative array mapping option name (short or long) to the help string.

fluent This method is part of a fluent interface and will return the same instance

Parameters

$helpMap

array

Returns

\Zend\Console\Getopt

Define one configuration option as a key/value pair.

setOption(string $configKey, string $configValue) : \Zend\Console\Getopt

These are not program options, but properties to configure the behavior of Zend\Console\Getopt.

fluent This method is part of a fluent interface and will return the same instance

Parameters

$configKey

string

$configValue

string

Returns

\Zend\Console\Getopt

setOptionCallback()

setOptionCallback(string $option, callable $callback) : \Zend\Console\Getopt
fluent This method is part of a fluent interface and will return the same instance

Parameters

$option

string

The name of the property which, if present, will call the passed callback with the value of this parameter.

$callback

callable

The callback that will be called for this option. The first parameter will be the value of getOption($option), the second parameter will be a reference to $this object. If the callback returns false then an Exception\RuntimeException will be thrown indicating that there is a parse issue with this option.

Returns

\Zend\Console\Getopt

Define multiple configuration options from an associative array.

setOptions(array $getoptConfig) : \Zend\Console\Getopt

These are not program options, but properties to configure the behavior of Zend\Console\Getopt.

fluent This method is part of a fluent interface and will return the same instance

Parameters

$getoptConfig

array

Returns

\Zend\Console\Getopt

Return the current set of options and parameters seen as an array of canonical options and parameters.

toArray() : array

Clusters have been expanded, and option aliases have been mapped to their primary option names.

Returns

array

Return the current set of options and parameters seen in Json format.

toJson() : string

Returns

string

Return the current set of options and parameters seen as a string.

toString() : string

Returns

string

Return the current set of options and parameters seen in XML format.

toXml() : string

Returns

string

Define legal options using the gnu-style format.

_addRulesModeGnu(string $rules) 

Parameters

$rules

string

Define legal options using the Zend-style format.

_addRulesModeZend(array $rules) 

Parameters

$rules

array

Exceptions

\Zend\Console\Exception\ExceptionInterface

Return true if the parameter is in a valid format for the option $flag.

_checkParameterType(string $flag, string $param) : boolean

Throw an exception in most other cases.

Parameters

$flag

string

$param

string

Exceptions

\Zend\Console\Exception\ExceptionInterface

Returns

boolean

Parse command-line arguments for a single long option.

_parseLongOption($argv) 

A long option is preceded by a double '--' character. Long options may not be clustered.

Parameters

$argv

Parse command-line arguments for short options.

_parseShortOptionCluster($argv) 

Short options are those preceded by a single '-' character. Short options may be clustered.

Parameters

$argv

Parse command-line arguments for a single option.

_parseSingleOption(string $flag, mixed $argv) 

Parameters

$flag

string

$argv

mixed

Exceptions

\Zend\Console\Exception\ExceptionInterface

Set TRUE value to given flag, if this option does not exist yet In other case increase value to show count of flags' usage

_setBooleanFlagValue(string $flag) 

Parameters

$flag

string

Set given value as value of numeric option

_setNumericOptionValue(integer $value) : void

Throw runtime exception if this action is deny by configuration or no one numeric option handlers is defined

Parameters

$value

integer

Exceptions

\Zend\Console\Exception\RuntimeException

Add relative to options' flag value

_setSingleOptionValue(string $flag, string $value) 

If options list already has current flag as key and parser should follow cumulative params by configuration, we should to add new param to array, not to overwrite

Parameters

$flag

string

$value

string

Triggers all the registered callbacks.

triggerCallbacks() 

 Properties

 

Stores the command-line arguments for the calling application.

$argv : array

Default

array()
 

Defaults for getopt configuration are: ruleMode is 'zend' format, dashDash (--) token is enabled, ignoreCase is not enabled, parseAll is enabled, cumulative parameters are disabled, this means that subsequent options overwrite the parameter value, cumulative flags are disable, freeform flags are disable.

$getoptConfig 

Default

array(self::CONFIG_RULEMODE => self::MODE_ZEND, self::CONFIG_DASHDASH => true, self::CONFIG_IGNORECASE => false, self::CONFIG_PARSEALL => true, self::CONFIG_CUMULATIVE_PARAMETERS => false, self::CONFIG_CUMULATIVE_FLAGS => false, self::CONFIG_PARAMETER_SEPARATOR => null, self::CONFIG_FREEFORM_FLAGS => false, self::CONFIG_NUMERIC_FLAGS => false)
 

A list of callbacks to call when a particular option is present.

$optionCallbacks : array

Default

array()
 

Stores options given by the user in the current invocation of the application, as well as parameters given in options.

$options : array

Default

array()
 

State of the options: parsed or not yet parsed?

$parsed : boolean

Default

false
 

Stores the name of the calling application.

$progname : string

Default

''
 

Stores the command-line arguments other than options.

$remainingArgs : array

Default

array()
 

Stores alternate spellings of legal options.

$ruleMap : array

Default

array()
 

Stores the list of legal options for this application.

$rules : array

Default

array()

 Constants

 

CONFIG_CUMULATIVE_FLAGS

CONFIG_CUMULATIVE_FLAGS = 'cumulativeFlags' 
 

CONFIG_CUMULATIVE_PARAMETERS

CONFIG_CUMULATIVE_PARAMETERS = 'cumulativeParameters' 
 

CONFIG_DASHDASH

CONFIG_DASHDASH = 'dashDash' 
 

CONFIG_FREEFORM_FLAGS

CONFIG_FREEFORM_FLAGS = 'freeformFlags' 
 

CONFIG_IGNORECASE

CONFIG_IGNORECASE = 'ignoreCase' 
 

CONFIG_NUMERIC_FLAGS

CONFIG_NUMERIC_FLAGS = 'numericFlags' 
 

CONFIG_PARAMETER_SEPARATOR

CONFIG_PARAMETER_SEPARATOR = 'parameterSeparator' 
 

CONFIG_PARSEALL

CONFIG_PARSEALL = 'parseAll' 
 

These are constants for optional behavior of this class.

CONFIG_RULEMODE = 'ruleMode' 

ruleMode is either 'zend' or 'gnu' or a user-defined mode. dashDash is true if '--' signifies the end of command-line options. ignoreCase is true if '--opt' and '--OPT' are implicitly synonyms. parseAll is true if all options on the command line should be parsed, regardless of whether an argument appears before them.

 

MODE_GNU

MODE_GNU = 'gnu' 
 

The options for a given application can be in multiple formats.

MODE_ZEND = 'zend' 

modeGnu is for traditional 'ab:c:' style getopt format. modeZend is for a more structured format.

 

PARAM_OPTIONAL

PARAM_OPTIONAL = '-' 
 

Constant tokens for various symbols used in the mode_zend rule format.

PARAM_REQUIRED = '=' 
 

TYPE_INTEGER

TYPE_INTEGER = 'i' 
 

TYPE_NUMERIC_FLAG

TYPE_NUMERIC_FLAG = '#' 
 

TYPE_STRING

TYPE_STRING = 's' 
 

TYPE_WORD

TYPE_WORD = 'w'