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.
48 lines
1.2 KiB
48 lines
1.2 KiB
<?php
|
|
|
|
namespace App\Data;
|
|
|
|
use InvalidArgumentException;
|
|
|
|
class Color {
|
|
/**
|
|
* @var string that represents an hexadecimal color code
|
|
*/
|
|
private string $hex;
|
|
|
|
/**
|
|
* @param string $value 6 bytes unsigned int that represents an RGB color
|
|
* @throws InvalidArgumentException if the value is negative or greater than 0xFFFFFF
|
|
*/
|
|
|
|
private function __construct(string $value) {
|
|
if ($value < 0 || $value > 0xFFFFFF) {
|
|
throw new InvalidArgumentException("int color value is invalid, must be positive and lower than 0xFFFFFF");
|
|
}
|
|
$this->hex = $value;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function getValue(): string {
|
|
return $this->hex;
|
|
}
|
|
|
|
public static function from(string $value): Color {
|
|
$color = self::tryFrom($value);
|
|
if ($color == null) {
|
|
var_dump($value);
|
|
throw new InvalidArgumentException("The string is not an hexadecimal code");
|
|
}
|
|
return $color;
|
|
}
|
|
|
|
public static function tryFrom(string $value): ?Color {
|
|
if (!preg_match('/#(?:[0-9a-fA-F]{6})/', $value)) {
|
|
return null;
|
|
}
|
|
return new Color($value);
|
|
}
|
|
}
|