/** * Maps a parameter * * @param int $pos * @param php.ReflectionParameter $reflect * @return [:var] */ protected function param($pos, $reflect) { $hint = $reflect->getTypeText(); if ('' === $hint) { $type = null; } else { $type = function () use($hint) { return $this->types->map($hint); }; } if ($reflect->isVariadic()) { $var = true; $default = null; } else { if ($reflect->isOptional()) { $var = null; $default = function () use($reflect) { return $reflect->getDefaultValue(); }; } else { $var = false; $default = null; } } return ['pos' => $pos, 'name' => $reflect->name, 'type' => $type, 'ref' => $reflect->isPassedByReference(), 'default' => $default, 'var' => $var, 'annotations' => function () use($reflect) { return $this->paramAnnotations($reflect); }]; }
/** * Maps a parameter * * @param int $pos * @param php.ReflectionParameter $reflect * @return [:var] */ protected function param($pos, $reflect) { if ($reflect->isArray()) { $type = function () { return Type::$ARRAY; }; } else { if ($reflect->isCallable()) { $type = function () { return Type::$CALLABLE; }; } else { if ($class = $reflect->getClass()) { $type = function () use($class) { return new XPClass($class); }; } else { $type = null; } } } if (self::$VARIADIC_SUPPORTED && $reflect->isVariadic()) { $var = true; $default = null; } else { if ($reflect->isOptional()) { $var = null; $default = function () use($reflect) { return $reflect->getDefaultValue(); }; } else { $var = false; $default = null; } } return ['pos' => $pos, 'name' => $reflect->name, 'type' => $type, 'ref' => $reflect->isPassedByReference(), 'default' => $default, 'var' => $var, 'annotations' => function () use($reflect) { return $this->paramAnnotations($reflect); }]; }