Exemplo n.º 1
0
 public function isVariadic() : bool
 {
     $isNativelyVariadic = $this->reflection->isVariadic();
     if (!$isNativelyVariadic && $this->reflection->getFileName() !== false) {
         $key = sprintf('variadic-function-%s-v2', $this->reflection->getName());
         $cachedResult = $this->cache->load($key);
         if ($cachedResult === null) {
             $nodes = $this->parser->parseFile($this->reflection->getFileName());
             $result = $this->callsFuncGetArgs($nodes);
             $this->cache->save($key, $result);
             return $result;
         }
         return $cachedResult;
     }
     return $isNativelyVariadic;
 }
Exemplo n.º 2
0
 /**
  * @return self
  */
 public static function from($from) : self
 {
     if (is_string($from) && strpos($from, '::')) {
         $from = new \ReflectionMethod($from);
     } elseif (is_array($from)) {
         $from = new \ReflectionMethod($from[0], $from[1]);
     } elseif (!$from instanceof \ReflectionFunctionAbstract) {
         $from = new \ReflectionFunction($from);
     }
     $method = new static();
     $method->name = $from->isClosure() ? NULL : $from->getName();
     foreach ($from->getParameters() as $param) {
         $method->parameters[$param->getName()] = Parameter::from($param);
     }
     if ($from instanceof \ReflectionMethod) {
         $method->static = $from->isStatic();
         $method->visibility = $from->isPrivate() ? 'private' : ($from->isProtected() ? 'protected' : NULL);
         $method->final = $from->isFinal();
         $method->abstract = $from->isAbstract() && !$from->getDeclaringClass()->isInterface();
         $method->body = $from->isAbstract() ? FALSE : '';
     }
     $method->returnReference = $from->returnsReference();
     $method->variadic = PHP_VERSION_ID >= 50600 && $from->isVariadic();
     $method->comment = $from->getDocComment() ? preg_replace('#^\\s*\\* ?#m', '', trim($from->getDocComment(), "/* \r\n\t")) : NULL;
     if (PHP_VERSION_ID >= 70000 && $from->hasReturnType()) {
         $returnType = $from->getReturnType();
         $method->returnType = $returnType->isBuiltin() ? (string) $returnType : '\\' . $returnType;
     }
     return $method;
 }