nikic / PHP-Parser 包的简单实用
解析PHP文件:
<?php require 'vendor/autoload.php'; use PhpParser\ParserFactory; $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 \PhpParser\Node\Stmt\Namespace_) {
echo 'class namespace: ' . join('\\', $v->name->parts), PHP_EOL;
foreach ($v->stmts as $kk => $vv) {
if ($vv instanceof \PhpParser\Node\Stmt\Use_) { //多个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 \PhpParser\Node\Stmt\Class_) {//类内容
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 \PhpParser\Node\Stmt\Property) {//属性
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 \PhpParser\Node\Stmt\ClassMethod) {//方法
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;
}
}
}
}
}
}
}
执行后:
nikic / PHP-Parser 包的简单实用的更多相关文章
- Linux下好用的简单实用命令
1.你是否为在输入了一大串命令之后发现第一个字符打错了而苦恼?只能删除重来嘛?或者一步步左移光标? NO,一个组合键轻松搞定 Ctrl+A -----到命令行首 Ctrl+E ------到命令行末 ...
- Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件!
源:Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件! 2014年02月06日发布控件的重要更新版本: Victor 串口控件 1.5.0.2 版本 (包 ...
- C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点
C#反射实现 一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...
- Java注解的基本概念和原理及其简单实用
一.注解的基本概念和原理及其简单实用 注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析 ...
- .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序
.NET 跨平台RPC框架DotNettyRPC DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...
- hook框架frida的安装以及简单实用案例
1.下载地址 https://github.co/frida/frida/releases 2.另外两种安装方法 1.Install from prebuilt binaries This is th ...
- jQuery的几种简单实用效果
许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...
- 经验分享:10个简单实用的 jQuery 代码片段
尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...
- 简单实用的PHP防注入类实例
这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注 ...
随机推荐
- AC3 Rematrix
当L R channel highly correlated时,AC3 encoder 使用rematrix技术压缩L/R的和和差. 原始信号为left,right,使用rematrix压缩信号为le ...
- (转载)Docker的boot2docker.iso镜像使用
原文路径:https://blog.csdn.net/jiangjingxuan/article/details/54908272#commentsedit 在Docker首次启动时需要下载的一个bo ...
- 浅谈DAO工厂设计模式(工厂模式的好处)
随着软件分层设计的流行及广泛的应用,对于DAO的设计模式大家已经不再陌生了,DAO层已经在软件系统的开发中成为必不可少的一层,将后台的数据层和前台的VO进行分离.前段时间也针对于DAO的设计介绍过一个 ...
- makecert 产出证书
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin>makecert -r -n // -e // -sv mymuse.pvk my ...
- opencv:轮廓匹配
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- sqli-libs(42-45(post型)关)
Less_42 查看源代码,可以看到password没有经过mysqli_real_escape_string()函数进行处理,所以这个时候我们在这个位置进行构造 使用admin 111111进行登录 ...
- sqli-libs(29(jspstudy)-31关)
Less_29 Less-29: 需要用到jspstudy跟phpstudy 搭建jspstudy: sqli-labs-master文件夹下面还有tomcat文件,这才是真正的关卡,里面的jsp ...
- Flutter 中的表单
一.Flutter 常用表单介绍 Flutter 中常见的表单有 TextField 单行文本框,TextField 多行文本框.CheckBox.Radio.Switch CheckboxLi ...
- CSS学习(11)常规流
盒模型:规定单个盒子的规则 视觉格式化模型(布局规则):页面中多个盒子的排列规则 三种方式: 1.常规流 2.浮动 3.定位 常规流布局 常规流 也可以叫做 文档流.普通文档流.常规文档流 所 ...
- zookeeper集群搭建记录
本文仅记录zookeeper集群搭建的过程,留待日后查看.使用. 一.硬件机器: 192.168.183.195 master-node 192.168.183.194 data-node1 192. ...