PHP TypeLang Help

Feature Toggling

You can enable or disable a set of parser features if your task requires only partial support of the functionality. Such a feature allows you to conveniently implement more strict functionality.

Literals

Literals are concrete values such as 42, 0xDEAD, "string", 0.23, etc.

To enable or disable literals, use the literals: bool flag.

$parser = new TypeLang\Parser\Parser( literals: false, ); $result = $parser->parse('42');
TypeLang\Parser\Exception\ParseException: Literal values not allowed in "42"

Generics

To enable or disable template arguments (generics), use the generics: bool flag.

$parser = new TypeLang\Parser\Parser( generics: false, ); $result = $parser->parse('Example<T>');
TypeLang\Parser\Exception\ParseException: Template arguments not allowed in "Example<T>"

Hints

To enable or disable template argument hints (argument modifiers), use the hints: bool flag.

$parser = new TypeLang\Parser\Parser( hints: false, ); $result = $parser->parse('Example<out T, in U>');
TypeLang\Parser\Exception\ParseException: Template argument hints not allowed in "Example<out T, in U>"

Lists

To enable or disable type lists (legacy/short syntax for iterable types), use the list: bool flag.

$parser = new TypeLang\Parser\Parser( list: false, ); $result = $parser->parse('Example[]');
TypeLang\Parser\Exception\ParseException: Square bracket list types not allowed in "Example[]"

Offsets

To enable or disable type offsets, use the offsets: bool flag.

$parser = new TypeLang\Parser\Parser( offsets: false, ); $result = $parser->parse('Example[Type]');
TypeLang\Parser\Exception\ParseException: Type offsets not allowed in "Example[Type]"

Callables

To enable or disable callables (delegates), use the callables: bool flag.

$parser = new TypeLang\Parser\Parser( callables: false, ); $result = $parser->parse('fn()');
TypeLang\Parser\Exception\ParseException: Callable types not allowed in "fn()"

Shapes

To enable or disable shape fields, use the shapes: bool flag.

$parser = new TypeLang\Parser\Parser( shapes: false, ); $result = $parser->parse(<<<'PHP' array{ foo: T, ... } PHP);
TypeLang\Parser\Exception\ParseException: Shape fields not allowed in "array{\n foo: T,\n ...\n}"

Unions

To enable or disable union types, use the union: bool flag.

$parser = new TypeLang\Parser\Parser( union: false, ); $result = $parser->parse('T|U');
TypeLang\Parser\Exception\ParseException: Union types not allowed in "T|U"

Intersections

To enable or disable union types, use the intersection: bool flag.

$parser = new TypeLang\Parser\Parser( intersection: false, ); $result = $parser->parse('T&U');
TypeLang\Parser\Exception\ParseException: Intersection types not allowed in "T&U"

Conditional

To enable or disable conditional types (expressions), use the conditional: bool flag.

$parser = new TypeLang\Parser\Parser( conditional: false, ); $result = $parser->parse('T is U ? 23 : 42');
TypeLang\Parser\Exception\ParseException: Conditional expressions not allowed in "T is U ? 23 : 42"

Attributes

To enable or disable attributes, use the attributes: bool flag.

$parser = new TypeLang\Parser\Parser( attributes: false, ); $result = $parser->parse(<<<'PHP' array{ #[name("new_name"), skip_when_empty] oldName: int, } PHP);
TypeLang\Parser\Exception\ParseException: Shape field attributes not allowed in "array{\n #[name("new_name"), skip_when_empt…" (19+)
03 February 2025