Value Objects
<?php
namespace Sabel;
use Sabel\AbstractValueInterface;
class SystemReferenceNumberValue
{
private $value;
private function __construct(){}
public function getValue()
{
return $this->value;
}
// Use named constructors
public static function fromString($string)
{
$number = new SystemReferenceNumberValue;
$number->setValue($string);
$number->filter()->validate();
return $number;
}
protected function filter()
{
$this->setValue(trim($this->value));
return $this;
}
private function validate()
{
// Ensure value is within allowed range
if ($this->value <= 0)
{
throw new \InvalidArgumentException("System reference number must be a positive integer");
}
elseif ($this->value > 999999999)
{
throw new \InvalidArgumentException("System reference number cannot be greater than 999999999");
}
return $this;
}
private function setValue($value)
{
// Ensure value is an integer
$this->value = (int) $value;
}
}
<?php
namespace Sabel;
class MyController
{
public function myMethod($data)
{
SysemReferenceNumberValue::fromString($data['systemReferenceNumber']);
// Use SystemReferenceNumber value object from here on out
}
}