You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.7 KiB
69 lines
1.7 KiB
<?php
|
|
|
|
namespace IQBall\Core\Data;
|
|
|
|
use InvalidArgumentException;
|
|
|
|
/**
|
|
* Enumeration class workaround
|
|
* As there is no enumerations in php 7.4, this class
|
|
* encapsulates an integer value and use it as a variant discriminant
|
|
*/
|
|
final class MemberRole {
|
|
private const ROLE_PLAYER = 0;
|
|
private const ROLE_COACH = 1;
|
|
private const MIN = self::ROLE_PLAYER;
|
|
private const MAX = self::ROLE_COACH;
|
|
|
|
private int $value;
|
|
|
|
private function __construct(int $val) {
|
|
if (!$this->isValid($val)) {
|
|
throw new InvalidArgumentException("Valeur du rôle invalide");
|
|
}
|
|
$this->value = $val;
|
|
}
|
|
|
|
public static function player(): MemberRole {
|
|
return new MemberRole(MemberRole::ROLE_PLAYER);
|
|
}
|
|
|
|
public static function coach(): MemberRole {
|
|
return new MemberRole(MemberRole::ROLE_COACH);
|
|
}
|
|
|
|
public function name(): string {
|
|
switch ($this->value) {
|
|
case self::ROLE_COACH:
|
|
return "COACH";
|
|
case self::ROLE_PLAYER:
|
|
return "PLAYER";
|
|
}
|
|
die("unreachable");
|
|
}
|
|
|
|
public static function fromName(string $name): ?MemberRole {
|
|
switch ($name) {
|
|
case "COACH":
|
|
return MemberRole::coach();
|
|
case "PLAYER":
|
|
return MemberRole::player();
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private function isValid(int $val): bool {
|
|
return ($val <= self::MAX and $val >= self::MIN);
|
|
}
|
|
|
|
public function isPlayer(): bool {
|
|
return ($this->value == self::ROLE_PLAYER);
|
|
}
|
|
|
|
public function isCoach(): bool {
|
|
return ($this->value == self::ROLE_COACH);
|
|
}
|
|
|
|
}
|