Use trait instead of class to define base class.

With class, it's not possible to override constructor visibility.
So, it's not possible to build a flyweight class (http://en.wikipedia.org/wiki/Flyweight_pattern) using a
base class because it's not possible to define its constructor as private, because it is public in the base class.
But with a trait, it's possible to override a method visibility at compile time, so it's possible to
create a flywieght class:

<?php

use estvoyage\value\world\integer;

class flyweight
{
   use integer {
      __construct as private;
      validate as isInteger;
   }

   function static build($value)
   {
      static $instances = [];

      if (! self::isInteger($value) || $value < 5 || $value > 10)
      {
	 throw new \domainException('Argument should be an integer ≥ 5 and ≤ 10');
      }

      if (! isset($instances[$value]))
      {
	 $instances[$value] = new self($value);
      }

      return $instances[$value];
   }
}

?>