15     private $namespaceResolver;
    20     private $scalarTypesProvider;
    52         ) || !$inherited && 
$class->getConstructor()->class != 
$class->getName()
    57         $constructor = new \Zend\Code\Reflection\MethodReflection(
$class->getName(), 
'__construct');
    58         foreach ($constructor->getParameters() as $parameter) {
    59             $name = $parameter->getName();
    60             $position = $parameter->getPosition();
    63             if ($parameter->isOptional()) {
    64                 if ($parameter->isDefaultValueAvailable()) {
    65                     $value = $parameter->getDefaultValue();
    66                     if (
true == is_array(
$value)) {
    71                         $default = $parameter->getDefaultValue();
    73                 } 
elseif ($parameter->allowsNull()) {
    80                 'position' => $position,
    81                 'type' => $this->processType(
$class, $parameter),
    82                 'isOptional' => $parameter->isOptional(),
    83                 'default' => $default,
    96     private function processType(\ReflectionClass 
$class, \
Zend\Code\Reflection\ParameterReflection $parameter)
    98         if ($parameter->getClass()) {
   102         $type =  $parameter->detectType();
   104         if (
$type === 
'null') {
   108         if (strpos(
$type, 
'[]') !== 
false) {
   112         if (!in_array(
$type, $this->scalarTypesProvider->getTypes())) {
   113             $availableNamespaces = $this->namespaceResolver->getImportedNamespaces(file(
$class->getFileName()));
   114             $availableNamespaces[0] = 
$class->getNamespaceName();
   115             return $this->namespaceResolver->resolveNamespace(
$type, $availableNamespaces);
   131         if (!
$class->getFileName()) {
   135         $trimFunction = 
function (&
$value) {
   146         $pattern = 
'/parent::__construct\(([ ' .
   148             ']*[$]{1}[a-zA-Z0-9_]*,)*[ ' .
   151             '([$]{1}[a-zA-Z0-9_]*){1}[' .
   169         foreach (
$arguments as $argumentPosition => $argumentName) {
   170             $type = isset($classArguments[$argumentName]) ? $classArguments[$argumentName][
'type'] : 
null;
   172                 'name' => $argumentName,
   173                 'position' => $argumentPosition,
   190         if ($requiredType === $actualType) {
   195         if ($requiredType === 
null || $actualType === 
null) {
   203         if ($requiredType === 
'array' || $actualType === 
'array') {
   207         if ($requiredType === 
'mixed' || $actualType === 
'mixed') {
   222         if (is_array($var)) {
   224             foreach ($var as $key => 
$value) {
   227             $code = 
'array(' . implode(
', ', $toImplode) . 
')';
   230             return var_export($var, 
true);
   242         $regexp = 
'(@([a-z_][a-z0-9_]+)\(([^\)]+)\))i';
   243         $docBlock = 
$class->getConstructor()->getDocComment();
   245         preg_match_all($regexp, $docBlock, $matches);
   246         foreach (array_keys($matches[0]) as 
$index) {
 is_subclass_of($obj, $className)
 
elseif(isset( $params[ 'redirect_parent']))
 
getConstructorArguments(\ReflectionClass $class, $groupByPosition=false, $inherited=false)
 
isCompatibleType($requiredType, $actualType)
 
$_option $_optionId $class
 
getAnnotations(\ReflectionClass $class)
 
__construct(NamespaceResolver $namespaceResolver=null, ScalarTypesProvider $scalarTypesProvider=null)
 
getParentCall(\ReflectionClass $class, array $classArguments)
 
if(!isset($_GET['name'])) $name