Overview

Namespaces

  • Contrib
    • Bundle
      • CoverallsBundle
        • Console
        • Entity
      • CoverallsV1Bundle
        • Api
        • Collector
        • Command
        • Config
        • Entity
          • Git
    • Component
      • File
      • Log
      • System
        • Git
  • Guzzle
    • Batch
      • Exception
    • Cache
    • Common
      • Exception
    • Http
      • Curl
      • Exception
      • Message
      • QueryAggregator
    • Inflection
    • Iterator
    • Log
    • Parser
      • Cookie
      • Message
      • UriTemplate
      • Url
    • Plugin
      • Async
      • Backoff
      • Cache
      • Cookie
        • CookieJar
        • Exception
      • CurlAuth
      • ErrorResponse
        • Exception
      • History
      • Log
      • Md5
      • Mock
      • Oauth
    • Service
      • Builder
      • Command
        • Factory
        • LocationVisitor
          • Request
          • Response
      • Description
      • Exception
      • Resource
    • Stream
  • PHP
  • Psr
    • Log
  • Symfony
    • Component
      • Config
        • Definition
          • Builder
          • Exception
        • Exception
        • Loader
        • Resource
        • Util
      • Console
        • Command
        • Formatter
        • Helper
        • Input
        • Output
        • Tester
      • EventDispatcher
        • Debug
      • Finder
        • Adapter
        • Comparator
        • Exception
        • Expression
        • Iterator
        • Shell
      • Stopwatch
      • Yaml
        • Exception

Classes

  • ArgvInput
  • ArrayInput
  • Input
  • InputArgument
  • InputDefinition
  • InputOption
  • StringInput

Interfaces

  • InputInterface
  • Overview
  • Namespace
  • Class
  • Tree
  • Todo
  1: <?php
  2: 
  3: /*
  4:  * This file is part of the Symfony package.
  5:  *
  6:  * (c) Fabien Potencier <fabien@symfony.com>
  7:  *
  8:  * For the full copyright and license information, please view the LICENSE
  9:  * file that was distributed with this source code.
 10:  */
 11: 
 12: namespace Symfony\Component\Console\Input;
 13: 
 14: /**
 15:  * Represents a command line option.
 16:  *
 17:  * @author Fabien Potencier <fabien@symfony.com>
 18:  *
 19:  * @api
 20:  */
 21: class InputOption
 22: {
 23:     const VALUE_NONE     = 1;
 24:     const VALUE_REQUIRED = 2;
 25:     const VALUE_OPTIONAL = 4;
 26:     const VALUE_IS_ARRAY = 8;
 27: 
 28:     private $name;
 29:     private $shortcut;
 30:     private $mode;
 31:     private $default;
 32:     private $description;
 33: 
 34:     /**
 35:      * Constructor.
 36:      *
 37:      * @param string  $name        The option name
 38:      * @param string  $shortcut    The shortcut (can be null)
 39:      * @param integer $mode        The option mode: One of the VALUE_* constants
 40:      * @param string  $description A description text
 41:      * @param mixed   $default     The default value (must be null for self::VALUE_REQUIRED or self::VALUE_NONE)
 42:      *
 43:      * @throws \InvalidArgumentException If option mode is invalid or incompatible
 44:      *
 45:      * @api
 46:      */
 47:     public function __construct($name, $shortcut = null, $mode = null, $description = '', $default = null)
 48:     {
 49:         if (0 === strpos($name, '--')) {
 50:             $name = substr($name, 2);
 51:         }
 52: 
 53:         if (empty($name)) {
 54:             throw new \InvalidArgumentException('An option name cannot be empty.');
 55:         }
 56: 
 57:         if (empty($shortcut)) {
 58:             $shortcut = null;
 59:         }
 60: 
 61:         if (null !== $shortcut) {
 62:             if ('-' === $shortcut[0]) {
 63:                 $shortcut = substr($shortcut, 1);
 64:             }
 65: 
 66:             if (empty($shortcut)) {
 67:                 throw new \InvalidArgumentException('An option shortcut cannot be empty.');
 68:             }
 69:         }
 70: 
 71:         if (null === $mode) {
 72:             $mode = self::VALUE_NONE;
 73:         } elseif (!is_int($mode) || $mode > 15 || $mode < 1) {
 74:             throw new \InvalidArgumentException(sprintf('Option mode "%s" is not valid.', $mode));
 75:         }
 76: 
 77:         $this->name        = $name;
 78:         $this->shortcut    = $shortcut;
 79:         $this->mode        = $mode;
 80:         $this->description = $description;
 81: 
 82:         if ($this->isArray() && !$this->acceptValue()) {
 83:             throw new \InvalidArgumentException('Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.');
 84:         }
 85: 
 86:         $this->setDefault($default);
 87:     }
 88: 
 89:     /**
 90:      * Returns the option shortcut.
 91:      *
 92:      * @return string The shortcut
 93:      */
 94:     public function getShortcut()
 95:     {
 96:         return $this->shortcut;
 97:     }
 98: 
 99:     /**
100:      * Returns the option name.
101:      *
102:      * @return string The name
103:      */
104:     public function getName()
105:     {
106:         return $this->name;
107:     }
108: 
109:     /**
110:      * Returns true if the option accepts a value.
111:      *
112:      * @return Boolean true if value mode is not self::VALUE_NONE, false otherwise
113:      */
114:     public function acceptValue()
115:     {
116:         return $this->isValueRequired() || $this->isValueOptional();
117:     }
118: 
119:     /**
120:      * Returns true if the option requires a value.
121:      *
122:      * @return Boolean true if value mode is self::VALUE_REQUIRED, false otherwise
123:      */
124:     public function isValueRequired()
125:     {
126:         return self::VALUE_REQUIRED === (self::VALUE_REQUIRED & $this->mode);
127:     }
128: 
129:     /**
130:      * Returns true if the option takes an optional value.
131:      *
132:      * @return Boolean true if value mode is self::VALUE_OPTIONAL, false otherwise
133:      */
134:     public function isValueOptional()
135:     {
136:         return self::VALUE_OPTIONAL === (self::VALUE_OPTIONAL & $this->mode);
137:     }
138: 
139:     /**
140:      * Returns true if the option can take multiple values.
141:      *
142:      * @return Boolean true if mode is self::VALUE_IS_ARRAY, false otherwise
143:      */
144:     public function isArray()
145:     {
146:         return self::VALUE_IS_ARRAY === (self::VALUE_IS_ARRAY & $this->mode);
147:     }
148: 
149:     /**
150:      * Sets the default value.
151:      *
152:      * @param mixed $default The default value
153:      *
154:      * @throws \LogicException When incorrect default value is given
155:      */
156:     public function setDefault($default = null)
157:     {
158:         if (self::VALUE_NONE === (self::VALUE_NONE & $this->mode) && null !== $default) {
159:             throw new \LogicException('Cannot set a default value when using InputOption::VALUE_NONE mode.');
160:         }
161: 
162:         if ($this->isArray()) {
163:             if (null === $default) {
164:                 $default = array();
165:             } elseif (!is_array($default)) {
166:                 throw new \LogicException('A default value for an array option must be an array.');
167:             }
168:         }
169: 
170:         $this->default = $this->acceptValue() ? $default : false;
171:     }
172: 
173:     /**
174:      * Returns the default value.
175:      *
176:      * @return mixed The default value
177:      */
178:     public function getDefault()
179:     {
180:         return $this->default;
181:     }
182: 
183:     /**
184:      * Returns the description text.
185:      *
186:      * @return string The description text
187:      */
188:     public function getDescription()
189:     {
190:         return $this->description;
191:     }
192: 
193:     /**
194:      * Checks whether the given option equals this one
195:      *
196:      * @param InputOption $option option to compare
197:      * @return Boolean
198:      */
199:     public function equals(InputOption $option)
200:     {
201:         return $option->getName() === $this->getName()
202:             && $option->getShortcut() === $this->getShortcut()
203:             && $option->getDefault() === $this->getDefault()
204:             && $option->isArray() === $this->isArray()
205:             && $option->isValueRequired() === $this->isValueRequired()
206:             && $option->isValueOptional() === $this->isValueOptional()
207:         ;
208:     }
209: }
210: 
php-coveralls API documentation generated by ApiGen 2.8.0