init implementation of abstract enum class

This commit is contained in:
Susann Sgorzaly
2018-02-22 21:01:06 +01:00
parent 657cec4b4e
commit a74736d4da
3 changed files with 42 additions and 9 deletions

View File

@@ -0,0 +1,40 @@
<?php
namespace ParseCsv\enums;
use ReflectionClass;
abstract class AbstractEnum {
/**
* Creates a new value of some type
*
* @param mixed $value
*
* @throws \UnexpectedValueException if incompatible type is given.
*/
public function __construct($value)
{
if (!$this->isValid($value)) {
throw new \UnexpectedValueException("Value '$value' is not part of the enum " . get_called_class());
}
$this->value = $value;
}
public static function getConstants(){
$class = get_called_class();
$reflection = new \ReflectionClass($class);
return $reflection->getConstants();
}
/**
* Check if enum value is valid
*
* @param $value
*
* @return bool
*/
public static function isValid($value)
{
return in_array($value, static::getConstants(), true);
}
}

View File

@@ -9,7 +9,7 @@ namespace ParseCsv\enums;
*
* todo: needs a basic parent enum class for error handling.
*/
class DatatypeEnum {
class DatatypeEnum extends AbstractEnum {
const __DEFAULT = self::TYPE_STRING;

View File

@@ -1,15 +1,8 @@
<?php
/**
* Created by PhpStorm.
* User: sgorzaly
* Date: 22.02.18
* Time: 20:24
*/
namespace ParseCsv\enums;
class SortEnum {
class SortEnum extends AbstractEnum {
const SORT_TYPE_REGULAR = SORT_REGULAR;
const SORT_TYPE_NUMERIC = SORT_NUMERIC;