*/
class ClassCodeGenerator
{
+ /**
+ * @var TypeHintReference
+ */
+ private $typeHintReference;
+
+ public function __construct(TypeHintReference $typeHintReference = null)
+ {
+ $this->typeHintReference = $typeHintReference ?: new TypeHintReference();
+ }
+
/**
* Generates PHP code for class node.
*
private function generateArguments(array $arguments)
{
- return array_map(function (Node\ArgumentNode $argument) {
+ $typeHintReference = $this->typeHintReference;
+ return array_map(function (Node\ArgumentNode $argument) use ($typeHintReference) {
$php = '';
if (version_compare(PHP_VERSION, '7.1', '>=')) {
}
if ($hint = $argument->getTypeHint()) {
- switch ($hint) {
- case 'array':
- case 'callable':
- $php .= $hint;
- break;
-
- case 'iterable':
- if (version_compare(PHP_VERSION, '7.1', '>=')) {
- $php .= $hint;
- break;
- }
-
- $php .= '\\'.$hint;
- break;
-
- case 'string':
- case 'int':
- case 'float':
- case 'bool':
- if (version_compare(PHP_VERSION, '7.0', '>=')) {
- $php .= $hint;
- break;
- }
- // Fall-through to default case for PHP 5.x
-
- default:
- $php .= '\\'.$hint;
- }
+ $php .= $typeHintReference->isBuiltInParamTypeHint($hint) ? $hint : '\\'.$hint;
}
$php .= ' '.($argument->isPassedByReference() ? '&' : '');