Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions includes/BaconQrCode/Common/AbstractEnum.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
<?php
/**
* BaconQrCode
*
* @link http://github.com/Bacon/BaconQrCode For the canonical source repository
* @copyright 2013 Ben 'DASPRiD' Scholzen
* @license http://opensource.org/licenses/BSD-2-Clause Simplified BSD License
*/

namespace TwoFactor\BaconQrCode\Common;

use TwoFactor\BaconQrCode\Exception;
use ReflectionClass;

/**
* A general enum implementation until we got SplEnum.
*/
abstract class AbstractEnum
{
/**
* Default value.
*/
const __default = null;

/**
* Current value.
*
* @var mixed
*/
protected $value;

/**
* Cache of constants.
*
* @var array
*/
protected $constants;

/**
* Whether to handle values strict or not.
*
* @var boolean
*/
protected $strict;

/**
* Creates a new enum.
*
* @param mixed $initialValue
* @param boolean $strict
*/
public function __construct($initialValue = null, $strict = false)
{
$this->strict = $strict;
$this->change($initialValue);
}

/**
* Changes the value of the enum.
*
* @param mixed $value
* @return void
*/
public function change($value)
{
if (!in_array($value, $this->getConstList(), $this->strict)) {
throw new Exception\UnexpectedValueException('Value not a const in enum ' . get_class($this));
}

$this->value = $value;
}

/**
* Gets current value.
*
* @return mixed
*/
public function get()
{
return $this->value;
}

/**
* Gets all constants (possible values) as an array.
*
* @param boolean $includeDefault
* @return array
*/
public function getConstList($includeDefault = true)
{
if ($this->constants === null) {
$reflection = new ReflectionClass($this);
$this->constants = $reflection->getConstants();
}

if ($includeDefault) {
return $this->constants;
}

$constants = $this->constants;
unset($constants['__default']);

return $constants;
}

/**
* Gets the name of the enum.
*
* @return string
*/
public function __toString()
{
return array_search($this->value, $this->getConstList());
}
}
Loading