private static function fixDefaultValue($value, PropertyType $propertyType, $isNullable)
{
if ($isNullable and strtolower($value) === 'null') {
return null;
} elseif (!$propertyType->isBasicType()) {
throw new InvalidAnnotationException('Only properties of basic types may have default values specified.');
}
switch ($propertyType->getType()) {
case 'boolean':
$lower = strtolower($value);
if ($lower !== 'true' and $lower !== 'false') {
throw new InvalidAnnotationException("Property of type boolean cannot have default value '{$value}'.");
}
return $lower === 'true';
case 'integer':
if (!is_numeric($value) && !preg_match('~0x[0-9a-f]+~', $value)) {
throw new InvalidAnnotationException("Property of type integer cannot have default value '{$value}'.");
}
return intval($value, 0);
case 'float':
if (!is_numeric($value)) {
throw new InvalidAnnotationException("Property of type float cannot have default value '{$value}'.");
}
return floatval($value);
case 'array':
if (strtolower($value) !== 'array()' and $value !== '[]') {
throw new InvalidAnnotationException("Property of type array cannot have default value '{$value}'.");
}
return [];
case 'string':
if ($value === '\'\'' or $value === '""') {
return '';
}
return $value;
default:
return $value;
}
}