Pop\Code\Reflection::getClassMethods PHP Method

getClassMethods() protected method

Get methods
protected getClassMethods ( ) : void
return void
    protected function getClassMethods()
    {
        // Detect and set methods
        $methods = $this->getMethods();
        if (count($methods) > 0) {
            foreach ($methods as $value) {
                $methodExport = \ReflectionMethod::export($value->class, $value->name, true);
                // Get the method docblock
                if (strpos($methodExport, '/*') !== false && strpos($methodExport, '*/') !== false) {
                    $docBlock = substr($methodExport, strpos($methodExport, '/*'));
                    $docBlock = substr($docBlock, 0, strpos($methodExport, '*/') + 2);
                } else {
                    $docBlock = null;
                }
                $method = $this->getMethod($value->name);
                $visibility = 'public';
                if ($method->isPublic()) {
                    $visibility = 'public';
                } else {
                    if ($method->isProtected()) {
                        $visibility = 'protected';
                    } else {
                        if ($method->isPrivate()) {
                            $visibility = 'private';
                        }
                    }
                }
                $mthd = new Generator\MethodGenerator($value->name, $visibility, $method->isStatic());
                if (null !== $docBlock && strpos($docBlock, '/*') !== false) {
                    $mthd->setDocblock(Generator\DocblockGenerator::parse($docBlock, $mthd->getIndent()));
                }
                $mthd->setFinal($method->isFinal())->setAbstract($method->isAbstract());
                // Get the method parameters
                if (stripos($methodExport, 'Parameter') !== false) {
                    $matches = array();
                    preg_match_all('/Parameter \\#(.*)\\]/m', $methodExport, $matches);
                    if (isset($matches[0][0])) {
                        foreach ($matches[0] as $param) {
                            $name = null;
                            $value = null;
                            $type = null;
                            // Get name
                            $name = substr($param, strpos($param, '$'));
                            $name = trim(substr($name, 0, strpos($name, ' ')));
                            // Get value
                            if (strpos($param, '=') !== false) {
                                $value = trim(substr($param, strpos($param, '=') + 1));
                                $value = trim(substr($value, 0, strpos($value, ' ')));
                                $value = str_replace('NULL', 'null', $value);
                            }
                            // Get type
                            $type = substr($param, strpos($param, '>') + 1);
                            $type = trim(substr($type, 0, strpos($type, '$')));
                            if ($type == '') {
                                $type = null;
                            }
                            $mthd->addArgument($name, $value, $type);
                        }
                    }
                }
                // Get method body
                if (strpos($methodExport, '@@') !== false && file_exists($this->getFilename())) {
                    $lineNums = substr($methodExport, strpos($methodExport, '@@ ') + 3);
                    $start = trim(substr($lineNums, strpos($lineNums, ' ')));
                    $end = substr($start, strpos($start, ' - ') + 3);
                    $start = substr($start, 0, strpos($start, ' '));
                    $end = (int) $end;
                    if (is_numeric($start) && is_numeric($end)) {
                        $classLines = file($this->getFilename());
                        $body = null;
                        $start = $start + 1;
                        $end = $end - 1;
                        for ($i = $start; $i < $end; $i++) {
                            if (isset($classLines[$i])) {
                                if (substr($classLines[$i], 0, 8) == '        ') {
                                    $body .= substr($classLines[$i], 8);
                                } else {
                                    if (substr($classLines[$i], 0, 4) == '    ') {
                                        $body .= substr($classLines[$i], 4);
                                    } else {
                                        if (substr($classLines[$i], 0, 2) == "\t\t") {
                                            $body .= substr($classLines[$i], 2);
                                        } else {
                                            if (substr($classLines[$i], 0, 1) == "\t") {
                                                $body .= substr($classLines[$i], 1);
                                            } else {
                                                $body .= $classLines[$i];
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        $mthd->setBody(rtrim($body), false);
                    }
                }
                $this->generator->code()->addMethod($mthd);
            }
        }
    }