По многим причинам Hack/HHVM мы не можем использовать.
Костыли пришлось писать для примитивных типов (статика — необходимое зло в данном случае):
class ..._SimpleTypeHint {
public static function throwExceptionIfArgumentIsNotString($givenArgument);
public static function throwExceptionIfArgumentIsNotInteger($givenArgument);
public static function throwExceptionIfArgumentIsNotFloat($givenArgument);
public static function throwExceptionIfArgumentIsNotBoolean($givenArgument);
}
class ..._SimpleTypeCasting {
public static function toInteger($mixedValueToCast);
public static function toFloat($mixedValueToCast);
public static function toBoolean($mixedValueToCast);
}
А вот так выглядит худший случай использования:
class SomeClass {
/** @var int|null $someId */
public function doSomethingWithEntityId($someId)
{
if ($someId !== null) {
..._SimpleTypeHint::throwExceptionIfArgumentIsNotInteger($someId);
}
...
}
}
Костыли пришлось писать для примитивных типов (статика — необходимое зло в данном случае):
А вот так выглядит худший случай использования:
В результатах анализа будет секция PHP — это результаты проверки плагина.
Остальные примеры — это улучшение кода, да. Я просто ещё опустил много мелочи: производительность, возможные баги и прочее.