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

74 lines
1.8 KiB
PHP

<?php
/**
* Déclaration de la classe CommandLine\Argument\Parser\EnumParser
*/
namespace CommandLine\Argument\Parser;
use InvalidArgumentException;
/**
* Parseur vers une liste de valeurs possible (chaine de caractère).
*
* @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
*/
public function __construct ($values) {
$this->setValues($values);
}
/**
* @inheritDoc
*/
public function parseValue ($arg) {
if(!in_array($arg, $this->_values))
throw new InvalidArgumentException('La valeur ne fait partie de liste des valeurs autorisées (' . implode(', ', $this->getValues()) . ') : ' . $arg);
return $arg;
}
/**
* @inheritDoc
*/
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
* @see $_values
*/
public function setValues($values) {
if(!is_array($values))
throw new InvalidArgumentException('La liste de valeurs n\'est pas un tableau');
if(count($values) == 0)
throw new InvalidArgumentException('La liste de valeurs doit avoir au moins un élément');
$this->_values = $values;
return $this;
}
}