| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 | 
							- <?php
 
- // +----------------------------------------------------------------------
 
- // | ThinkPHP [ WE CAN DO IT JUST THINK ]
 
- // +----------------------------------------------------------------------
 
- // | Copyright (c) 2006~2015 http://thinkphp.cn All rights reserved.
 
- // +----------------------------------------------------------------------
 
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 
- // +----------------------------------------------------------------------
 
- // | Author: yunwuxin <448901948@qq.com>
 
- // +----------------------------------------------------------------------
 
- namespace think\console\output;
 
- class Question
 
- {
 
-     private $question;
 
-     private $attempts;
 
-     private $hidden         = false;
 
-     private $hiddenFallback = true;
 
-     private $autocompleterValues;
 
-     private $validator;
 
-     private $default;
 
-     private $normalizer;
 
-     /**
 
-      * 构造方法
 
-      * @param string $question 问题
 
-      * @param mixed  $default  默认答案
 
-      */
 
-     public function __construct($question, $default = null)
 
-     {
 
-         $this->question = $question;
 
-         $this->default  = $default;
 
-     }
 
-     /**
 
-      * 获取问题
 
-      * @return string
 
-      */
 
-     public function getQuestion()
 
-     {
 
-         return $this->question;
 
-     }
 
-     /**
 
-      * 获取默认答案
 
-      * @return mixed
 
-      */
 
-     public function getDefault()
 
-     {
 
-         return $this->default;
 
-     }
 
-     /**
 
-      * 是否隐藏答案
 
-      * @return bool
 
-      */
 
-     public function isHidden()
 
-     {
 
-         return $this->hidden;
 
-     }
 
-     /**
 
-      * 隐藏答案
 
-      * @param bool $hidden
 
-      * @return Question
 
-      */
 
-     public function setHidden($hidden)
 
-     {
 
-         if ($this->autocompleterValues) {
 
-             throw new \LogicException('A hidden question cannot use the autocompleter.');
 
-         }
 
-         $this->hidden = (bool) $hidden;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 不能被隐藏是否撤销
 
-      * @return bool
 
-      */
 
-     public function isHiddenFallback()
 
-     {
 
-         return $this->hiddenFallback;
 
-     }
 
-     /**
 
-      * 设置不能被隐藏的时候的操作
 
-      * @param bool $fallback
 
-      * @return Question
 
-      */
 
-     public function setHiddenFallback($fallback)
 
-     {
 
-         $this->hiddenFallback = (bool) $fallback;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 获取自动完成
 
-      * @return null|array|\Traversable
 
-      */
 
-     public function getAutocompleterValues()
 
-     {
 
-         return $this->autocompleterValues;
 
-     }
 
-     /**
 
-      * 设置自动完成的值
 
-      * @param null|array|\Traversable $values
 
-      * @return Question
 
-      * @throws \InvalidArgumentException
 
-      * @throws \LogicException
 
-      */
 
-     public function setAutocompleterValues($values)
 
-     {
 
-         if (is_array($values) && $this->isAssoc($values)) {
 
-             $values = array_merge(array_keys($values), array_values($values));
 
-         }
 
-         if (null !== $values && !is_array($values)) {
 
-             if (!$values instanceof \Traversable || $values instanceof \Countable) {
 
-                 throw new \InvalidArgumentException('Autocompleter values can be either an array, `null` or an object implementing both `Countable` and `Traversable` interfaces.');
 
-             }
 
-         }
 
-         if ($this->hidden) {
 
-             throw new \LogicException('A hidden question cannot use the autocompleter.');
 
-         }
 
-         $this->autocompleterValues = $values;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 设置答案的验证器
 
-      * @param null|callable $validator
 
-      * @return Question The current instance
 
-      */
 
-     public function setValidator($validator)
 
-     {
 
-         $this->validator = $validator;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 获取验证器
 
-      * @return null|callable
 
-      */
 
-     public function getValidator()
 
-     {
 
-         return $this->validator;
 
-     }
 
-     /**
 
-      * 设置最大重试次数
 
-      * @param null|int $attempts
 
-      * @return Question
 
-      * @throws \InvalidArgumentException
 
-      */
 
-     public function setMaxAttempts($attempts)
 
-     {
 
-         if (null !== $attempts && $attempts < 1) {
 
-             throw new \InvalidArgumentException('Maximum number of attempts must be a positive value.');
 
-         }
 
-         $this->attempts = $attempts;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 获取最大重试次数
 
-      * @return null|int
 
-      */
 
-     public function getMaxAttempts()
 
-     {
 
-         return $this->attempts;
 
-     }
 
-     /**
 
-      * 设置响应的回调
 
-      * @param string|\Closure $normalizer
 
-      * @return Question
 
-      */
 
-     public function setNormalizer($normalizer)
 
-     {
 
-         $this->normalizer = $normalizer;
 
-         return $this;
 
-     }
 
-     /**
 
-      * 获取响应回调
 
-      * The normalizer can ba a callable (a string), a closure or a class implementing __invoke.
 
-      * @return string|\Closure
 
-      */
 
-     public function getNormalizer()
 
-     {
 
-         return $this->normalizer;
 
-     }
 
-     protected function isAssoc($array)
 
-     {
 
-         return (bool) count(array_filter(array_keys($array), 'is_string'));
 
-     }
 
- }
 
 
  |