Annotations
phantm supports in-code annotations given in the form of PHPDoc comments. Those annotations will then be used as part as the type analysis phase. For example:
/** * @param int $var * @return int */ function foo($var) { return $var+2; }
Types allowed as annotations
phantm will support base types such as @int@ or @string@ but can also specify precise array types:
Array types
You can precisely specify array types inside annotations, the syntax is the following:
Array[ <key> => <type>, ..., ? => <type> ]
<key> can either be of the form “string” or 42.
the special “?” key can be used as a placeholder for any other entries. For example, one array that has “foo” being a String
or an Int
and the rest being Undefined
or Int
can be represented as:
Array["foo" => string | int, ? => undef | int]
Typedefs
phantm will support typedefs to allow you give names to complicated types. For example:
/** * @typedef mytype = Array["foo" => int, "bar" => string, ? => undef ] * @param #mytype $var * @return #mytype */ function foo($var) { return $var; }
Note that typedefs are global, and collected before any other annotations. This means that if you've two typedefs with the same name, only the second will be used, even for usages preceding it.