includes/Features/UserModes.php
<?php
namespace MobileFrontend\Features;
use ArrayIterator;
use IteratorAggregate;
use Traversable;
/**
* User Modes collection
*
* This class exists to provide a safe collection of IUserModes
* @package MobileFrontend\Features
*/
class UserModes implements IteratorAggregate {
/**
* @var array<string,IUserMode>
*/
private $modes = [];
/**
* Register new User Mode
* @param IUserMode $mode
*/
public function registerMode( IUserMode $mode ) {
$this->modes[$mode->getModeIdentifier()] = $mode;
}
/**
* Retrieve registered mode
*
* @param string $modeIdentifier
* @return IUserMode
*/
public function getMode( $modeIdentifier ) {
if ( !array_key_exists( $modeIdentifier, $this->modes ) ) {
throw new \RuntimeException( "$modeIdentifier User mode is undefined" );
}
return $this->modes[$modeIdentifier];
}
/**
* @return ArrayIterator
*/
public function getIterator(): Traversable {
return new ArrayIterator( $this->modes );
}
}