protected function processParams(&$def, DerivedClassScanner $sClass, MethodScanner $sMethod) { if (count($sMethod->getParameters()) === 0) { return; } $methodName = $sMethod->getName(); $def['parameters'][$methodName] = array(); foreach ($sMethod->getParameters(true) as $position => $p) { /** @var $p \Zend\Code\Scanner\ParameterScanner */ $actualParamName = $p->getName(); $paramName = $this->createDistinctParameterName($actualParamName, $sClass->getName()); $fqName = $sClass->getName() . '::' . $sMethod->getName() . ':' . $position; $def['parameters'][$methodName][$fqName] = array(); // set the class name, if it exists $def['parameters'][$methodName][$fqName][] = $actualParamName; $def['parameters'][$methodName][$fqName][] = ($p->getClass() !== null) ? $p->getClass() : null; $def['parameters'][$methodName][$fqName][] = !$p->isOptional(); } }
/** * Return the parameters for a method * * 3 item array: * #1 - Class name, string if it exists, else null * #2 - Optional?, boolean * #3 - Instantiable, boolean if class exists, otherwise null * * @return array */ public function compileScannerInjectionMethodParmeters(MethodScanner $methodScanner, $introspectionType) { $params = array(); $parameterScanners = $methodScanner->getParameters(true); // rules according to type $rules = $this->getIntrospectionRuleset()->getRules($introspectionType); /* @var $p Zend\Code\Scanner\ParameterScanner */ foreach ($parameterScanners as $p) { $paramName = $p->getName(); // create array for this parameter $params[$paramName] = array(); // get name, and class if it exists $pcName = $p->getClass(); if ($this->directoryScanner->hasClass($pcName)) { $pc = $this->directoryScanner->getClass($pcName); } if ($pcName) { // @todo Should we throw an exception if its an unknown type? $params[$paramName][] = $pcName; } else { $params[$paramName][] = null; } if ($introspectionType == IntrospectionRuleset::TYPE_SETTER && $rules['paramCanBeOptional']) { $params[$paramName][] = true; } else { $params[$paramName][] = $p->isOptional(); } if (isset($pc)) { $params[$paramName][] = ($pc->isInstantiable()) ? true : false; } else { $params[$paramName][] = null; } } return $params; }