Phan - PHP静态分析器
Posted 黑白之道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Phan - PHP静态分析器相关的知识,希望对你有一定的参考价值。
Phan是一个php的静态分析器,它倾向于最小化误报。它试图证明错误而不是正确。
它会查找常见问题,并在类型信息可用或可以推断时验证各种操作的类型兼容性。Phan对流量控制有很好的(但不是全面的)理解,并且不会试图追踪价值。
特征:
检查所有方法,函数,类,特征,接口,常量,属性和变量是否定义和可访问。
检查方法/函数/关闭调用中的类型安全性和参数问题。
检查PHP7 / PHP5向后兼容性。
检查旧版PHP 7.x次要版本中不支持的功能(例如object,void,iterable,?T,[$ x] = ...等)
检查数组访问是否完整。
检查二进制操作的类型安全性。
检查方法,函数和闭包的有效和类型安全的返回值。
检查数组,闭包,常量,属性,变量,一元运算符和二元运算符的否操作。
检查未使用/死/无法访问的代码。(通过 - 代码检测)
检查未使用的使用语句。
检查重新定义的类,函数和方法。
用类继承来检查是否完整(例如检查方法签名兼容性)。Phan还检查最终的类/方法被覆盖,抽象方法被实现,并且实现的接口实际上是一个接口(等等)。
支持命名空间,特征和可变参数。
支持联盟类型。
支持泛型数组,如int [],UserObject [],数组<int,UserObject>等。
从Phan> = 0.12.0开始支持数组形状,如数组{key:string,otherKey:?stdClass}等等(内部和PHPDoc标签中)。
即将发布的0.12.3版本将支持通过array {requiredKey:string,optionalKey?:string}指示数组形状的字段是可选的(对于@param有用)
支持phpdoc类型注释。
支持继承phpdoc类型注释。
支持检查phpdoc类型注释是实际类型签名的缩小形式(例如子类/子类型)
支持在元素/循环中从assert()语句和条件推断类型。
支持弃用类,方法和函数的@deprecated注解
支持元素(如常量,函数,类,类常量,属性或方法)的@internal注释作为其定义的包的内部。
支持用于抑制问题的@suppress <ISSUE_TYPE>注释。
支持神奇的@property注释(部分)(@property <union_type> <variable_name>)
支持magic @method注释(@method <union_type> <method_name>(<union_type> <param1_name>))
支持class_alias注释(实验性,默认关闭)
支持通过@ phan-closure-scope(示例)指示闭包将被绑定到的类,
支持分析传递给array_map,array_filter和其他内部数组函数的闭包和返回类型。(从Phan 0.10.1 / 0.8.9 开始)
提供广泛的配置以减弱分析,使其在大型草率代码库上非常有用
可以在许多内核上运行。(需要pcntl)
可以在后台运行(守护进程模式),然后快速响应请求来分析最新版本的文件。这也可以充当语??言服务器协议中的一个linter。语言服务器实现的一部分基于felixfbecker / php-language-server。在后台运行时,Phan可以从各种编辑器中使用。
输出以文本,checkstyle,json,pylint,csv或代码气味格式发送。
可以在源代码上运行用户插件以检查特定于您的代码的内容。Phan包含了您可能希望为您的项目启用的各种插件。
仅供于学习研究使用,不得非法使用,如非法操作,责任自行承担
文章出处:http://www.effecthacking.com,由华盟网翻译排版,转载请注明华盟网
你可能喜欢
以上是关于Phan - PHP静态分析器的主要内容,如果未能解决你的问题,请参考以下文章
PhpStorm添加PHP代码规范检查CodeSniffer(phpcs)和PHP代码静态分析工具Mess Detector(phpmd)