示例#1
0
    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();
        }
    }
示例#2
0
文件: Compiler.php 项目: ruflin/zf2
 /**
  * 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;
 }