name = $method->getName(); $this->filename = $method->getFileName(); $this->startline = $method->getStartLine(); $this->endline = $method->getEndLine(); $this->internal = $method->isInternal(); $this->docstring = $method->getDocComment(); $this->return_reference = $method->returnsReference(); foreach ($method->getParameters() as $param) { $this->parameters[] = new ParameterValue($param); } if (KINT_PHP70) { $this->returntype = $method->getReturnType(); if ($this->returntype) { $this->returntype = Utils::getTypeString($this->returntype); } } if ($method instanceof ReflectionMethod) { $this->static = $method->isStatic(); $this->operator = $this->static ? Value::OPERATOR_STATIC : Value::OPERATOR_OBJECT; $this->abstract = $method->isAbstract(); $this->final = $method->isFinal(); $this->owner_class = $method->getDeclaringClass()->name; $this->access = Value::ACCESS_PUBLIC; if ($method->isProtected()) { $this->access = Value::ACCESS_PROTECTED; } elseif ($method->isPrivate()) { $this->access = Value::ACCESS_PRIVATE; } } if ($this->internal) { return; } $docstring = new DocstringRepresentation( $this->docstring, $this->filename, $this->startline ); $docstring->implicit_label = true; $this->addRepresentation($docstring); $this->value = $docstring; } public function setAccessPathFrom(InstanceValue $parent) { static $magic = [ '__call' => true, '__callstatic' => true, '__clone' => true, '__construct' => true, '__debuginfo' => true, '__destruct' => true, '__get' => true, '__invoke' => true, '__isset' => true, '__set' => true, '__set_state' => true, '__sleep' => true, '__tostring' => true, '__unset' => true, '__wakeup' => true, ]; $name = \strtolower($this->name); if ('__construct' === $name) { $this->access_path = 'new \\'.$parent->getType(); } elseif ('__invoke' === $name) { $this->access_path = $parent->access_path; } elseif ('__clone' === $name) { $this->access_path = 'clone '.$parent->access_path; $this->showparams = false; } elseif ('__tostring' === $name) { $this->access_path = '(string) '.$parent->access_path; $this->showparams = false; } elseif (isset($magic[$name])) { $this->access_path = null; } elseif ($this->static) { $this->access_path = '\\'.$this->owner_class.'::'.$this->name; } else { $this->access_path = $parent->access_path.'->'.$this->name; } } public function getValueShort() { if (!$this->value || !($this->value instanceof DocstringRepresentation)) { return parent::getValueShort(); } $ds = $this->value->getDocstringWithoutComments(); if (!$ds) { return null; } $ds = \explode("\n", $ds); $out = ''; foreach ($ds as $line) { if (0 === \strlen(\trim($line)) || '@' === $line[0]) { break; } $out .= $line.' '; } if (\strlen($out)) { return \rtrim($out); } } public function getModifiers() { $mods = [ $this->abstract ? 'abstract' : null, $this->final ? 'final' : null, $this->getAccess(), $this->static ? 'static' : null, ]; $out = ''; foreach ($mods as $word) { if (null !== $word) { $out .= $word.' '; } } if (\strlen($out)) { return \rtrim($out); } } public function getAccessPath() { if (null !== $this->access_path) { if ($this->showparams) { return parent::getAccessPath().'('.$this->getParams().')'; } return parent::getAccessPath(); } } public function getParams() { if (null !== $this->paramcache) { return $this->paramcache; } $out = []; foreach ($this->parameters as $p) { $type = $p->getType(); if ($type) { $type .= ' '; } $default = $p->getDefault(); if ($default) { $default = ' = '.$default; } $ref = $p->reference ? '&' : ''; $out[] = $type.$ref.$p->getName().$default; } return $this->paramcache = \implode(', ', $out); } public function getPhpDocUrl() { if (!$this->internal) { return null; } if ($this->owner_class) { $class = \strtolower($this->owner_class); } else { $class = 'function'; } $funcname = \str_replace('_', '-', \strtolower($this->name)); if (0 === \strpos($funcname, '--') && 0 !== \strpos($funcname, '-', 2)) { $funcname = \substr($funcname, 2); } return 'https://secure.php.net/'.$class.'.'.$funcname; } }