You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
phpcommandline/Argument/Parser/EnumParser.class.php

75 lines
2.0 KiB
PHP

<?php
/**
* Déclaration de la classe CommandLine\Argument\Parser\EnumParser
*/
namespace CommandLine\Argument\Parser;
use Fidit\v3\Exception\InvalidArgument;
/**
* Parseur vers une liste de valeurs possible (chaine de caractère).
*
* @property string[] $values {@see $_values $_values}
*
* @package CommandLine\Argument\Parser
*/
class EnumParser implements IValueParser {
/**
* @var string[] Liste des valeurs autorisées
*/
protected $_values;
/**
* Crée un nouveau parseur.
*
* @param string[] $values La liste des valeurs autorisées.
*
* @throws InvalidArgument Si l'un des paramètres n'est pas correct
*/
public function __construct ($values) {
$this->setValues($values);
}
public function parseValue ($arg) {
if(!in_array($arg, $this->_values))
throw new InvalidArgument($arg, 'La valeur ne fait partie de liste des valeurs autorisées : '.implode(', ', $this->getValues()));
return $arg;
}
public function getValueDescription () {
return 'enum('.implode(',', $this->getValues()).')';
}
/**
* La liste des valeurs autoriséees.
*
* @return string[] La liste des valeurs
*
* @see $_values
*/
public function getValues() {
return $this->_values;
}
/**
* Définit la liste des valeurs autorisées.
*
* @param string[] $values La liste des valeurs
*
* @return $this
*
* @throws InvalidArgument Si la liste n'est pas un tableau ou si celui-ci est vide
*
* @see $_values
*/
public function setValues($values) {
if(!is_array($values))
throw new InvalidArgument($values, 'La liste de valeurs n\'est pas un tableau');
if(count($values) == 0)
throw new InvalidArgument($values, 'La liste de valeurs doit avoir au moins un élément');
$this->_values = $values;
return $this;
}
}