<?php
final class CommandId
{
private $name;
private $time;
public function __construct($name)
{
$this->time = time();
$this->name = trim($name);
if (empty($this->name)) {
throw new DomainException('Name must not be empty');
}
}
public static function fromString($idString)
{
$parts = explode('_', $idString);
if (count($parts) != 2) {
throw new DomainException("Unexpected format [$idString]");
}
$id = new static($parts[0]);
$id->time = (int) $parts[1];
return $id;
}
public function name()
{
return $this->name;
}
public function time()
{
return $this->time;
}
public function __toString()
{
return "{$this->name}_{$this->time}";
}
}
$one = new CommandId('foo');
$two = new CommandId('foo');
assert($one != $two, 'one should not equal two');
var_dump($one, $two, (string) $one, (string) $two);
Warning: assert(): one should not equal two failed in /in/d4iA2 on line 48
object(CommandId)#1 (2) {
["name":"CommandId":private]=>
string(3) "foo"
["time":"CommandId":private]=>
int(1392271856)
}
object(CommandId)#2 (2) {
["name":"CommandId":private]=>
string(3) "foo"
["time":"CommandId":private]=>
int(1392271856)
}
string(14) "foo_1392271856"
string(14) "foo_1392271856"