zoukankan      html  css  js  c++  java
  • nikic / PHP-Parser 包的简单实用

    解析PHP文件:

    <?php
    
    require 'vendor/autoload.php';
    
    use PhpParserParserFactory;
    
    $code = file_get_contents(dirname(__FILE__) . '/src/Aop/Target.php');
    $phpFactory = new ParserFactory();
    $parser = $phpFactory->create(ParserFactory::PREFER_PHP7);
    //var_dump($parser->parse($code));die();
    foreach ($parser->parse($code) as $k => $v) {
        if ($v instanceof PhpParserNodeStmtNamespace_) {
            echo 'class namespace: ' . join('\', $v->name->parts), PHP_EOL;
            foreach ($v->stmts as $kk => $vv) {
                if ($vv instanceof PhpParserNodeStmtUse_) { //多个use循环
                    foreach ($vv->uses as $kkk => $vvv) {
                        echo 'class use: ' . join('\', $vvv->name->parts), PHP_EOL;
                        echo 'class use alias: ' . $vvv->alias, PHP_EOL;
                    }
                } elseif ($vv instanceof PhpParserNodeStmtClass_) {//类内容
                    echo 'class extends: ' . $vv->extends, PHP_EOL;
                    echo 'class implements: ' . join(',', $vv->implements), PHP_EOL;
                    echo 'class name: ' . $vv->name, PHP_EOL;
                    foreach ($vv->stmts as $kkk => $vvv) {//类属性和方法
                        if ($vvv instanceof PhpParserNodeStmtProperty) {//属性
                            foreach ($vvv->props as $kkkk => $vvvv) {
                                echo 'class property name: ' . $vvvv->name, PHP_EOL;
                                echo 'class property value: ' . $vvvv->default->value, PHP_EOL;
                            }
                        } elseif ($vvv instanceof PhpParserNodeStmtClassMethod) {//方法
                            echo 'class method name: ' . $vvv->name->name, PHP_EOL;
                            echo 'classs method returnType: ' . $vvv->returnType, PHP_EOL;
                            foreach ($vvv->params as $kkkk => $vvvv) {//方法参数
                                echo 'classs method param name: ' . $vvvv->var->name, PHP_EOL;
                                echo 'classs method param default: ' . $vvvv->default, PHP_EOL;
                            }
                            foreach ($vvv->stmts as $kkkk => $vvvv) {//方法返回
                                echo 'class method return value: ' . $vvvv->expr->value, PHP_EOL;
                            }
                        }
                    }
                }
            }
        }
    }

    执行后:

     

  • 相关阅读:
    typora永久插入图片
    Cortex-M 处理器 hardfault 定位方法和步骤(基于Keil mdk)
    STM32之CAN ---CAN ID过滤器分析
    记一次payload绕过电脑管家免杀
    kali linux 静态地址和动态地址的设置
    mona
    武装你的浏览器--自用的火狐插件推荐
    kali linux开启ssh
    记一次腾讯云服务器centos linux可视化桌面安装并进行远程桌面登录及其安装中文包
    widows终端远程连接Linux服务器
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/12171508.html
Copyright © 2011-2022 走看看