| 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'));    }}
 |