<?php
final class CommandId
{
private $name;
private $time;
private $hash;
public function __construct($name, $time = null, $hash = null)
{
$this->time = floatval($time ?: microtime(true));
$this->name = trim($name);
$this->hash = strval($hash ?: hash('crc32', rand(0, $this->time)));
if (empty($this->name)) {
throw new DomainException('Name must not be empty');
}
}
public static function fromString($idString)
{
$parts = explode('_', $idString);
if (count($parts) != 3) {
throw new DomainException("Unexpected format [$idString]");
}
return new static($parts[0], $parts[1], $parts[2]);
}
public function name()
{
return $this->name;
}
public function time()
{
return $this->time;
}
public function equals(self $other)
{
return ((string) $this == (string) $other);
}
public function __toString()
{
return implode('_', [$this->name, $this->time, $this->hash]);
}
}
$one = new CommandId('foo');
$two = CommandId::fromString((string) $one);
var_dump($one, $two, $one->equals($two));
preferences:
33.43 ms | 402 KiB | 5 Q