protected function getType(&$value)
{
$type = self::T_NONE;
if (')' === $value) {
return self::T_CLOSE_PARENTHESIS;
}
if ('{' === $value) {
return self::T_OPEN_CURLY_BRACE;
}
if ('}' === $value) {
return self::T_CLOSE_CURLY_BRACE;
}
if (':' === $value) {
return self::T_COLON;
}
if (',' === $value) {
return self::T_COMMA;
}
if ($this->isTypePatternToken($value)) {
$value = trim($value, '@');
return self::T_TYPE_PATTERN;
}
if ($this->isStringToken($value)) {
$value = $this->extractStringValue($value);
return self::T_STRING;
}
if ($this->isBooleanToken($value)) {
$value = strtolower($value) === 'true' ? true : false;
return self::T_BOOLEAN;
}
if ($this->isNullToken($value)) {
$value = null;
return self::T_NULL;
}
if (is_numeric($value)) {
if (is_string($value)) {
$value = strpos($value, '.') === false ? (int) $value : (double) $value;
}
return self::T_NUMBER;
}
if ($this->isExpanderNameToken($value)) {
$value = rtrim(ltrim($value, '.'), '(');
return self::T_EXPANDER_NAME;
}
return $type;
}