##Documentation
$type = new Type(Type::BASIC);
$type = Type::createFromConstantName('BASIC');
$type = Type::BASIC();
new Type(5); // InvalidArgumentException
$type->getValue(); // 1
$type->getName(); // BASIC
$type->isEqual($type); // true
$type->isEqual(Type::Basic); // true
Type::getValues(); // [1, 2]
Type::getNames(); // [1 => 'BASIC', 2 => 'COMPLEX']
Type::getNames([2]); // [2 => 'COMPLEX']
Type::isValidValue(1); // true
Type::isValidValue(3); // false
$nullType = new Type(null);
$nullType->getName(); // null
$nullType->getValue(); // null