资讯专栏INFORMATION COLUMN

代码规范 - Phan静态分析

luqiuwen / 332人阅读

摘要:简介是一个的静态分析器,它倾向于最小化误报。它试图证明错误而不是正确。它会查找常见问题,并在类型信息可用或可以推断时验证各种操作的类型兼容性。

Phan 简介

Phan是一个PHP的静态分析器,它倾向于最小化误报。它试图证明错误而不是正确。

它会查找常见问题,并在类型信息可用或可以推断时验证各种操作的类型兼容性。

扩展安装

ast

windows

mac: pecl install ast

pcntl.so

mac: 用源码编译安装

windows: 不支持

入门
## 安装
composer require --dev phan/phan

## 初始化配置
vendor/bin/phan --init --init-level=3

## 执行
vendor/bin/phan

## 执行(windows)
sh vendorinphan
核心配置解读 .phan/config.php
return [
    // 开启的子进程数量,需要使用pcntl扩展,windows不支持,mac安装后,可以修改
    "processes" => 1,
    
    // 开启进度条
    "progress_bar" => true,
    
    // 解析的目录(包含依赖,依赖需要从exclude剔除)
    "directory_list" => [
        "app",
        "vendor" // 建议最小化原则,少加载文件
    ],
    
    // 不需要解析的目录
    "exclude_analysis_directory_list" => [
        "vendor",
        ".phan",
    ],
    
    // 需要解析的多带带的文件
    "file_list" => [],
    
    // 需要剔除的文件列表
    "exclude_file_list" => [],
    
    // 自动加载的内部类库,一般用于加载扩展stub,下面引入了laravel的stub
    "autoload_internal_extension_signatures" => [
        "laravelIdeHelper" => "_ide_helper.php",
        "laravelMeta" => ".phpstorm.meta.php"
    ],
]
忽略部分报错:建议尽量不要使用 suppress 忽略整个方法
class D {
    /**
     * @suppress PhanUndeclaredClassMethod
     */
    function g() {
        C::f();
    }
}
@phan-suppress-current-line 忽略当前行
function test_line_suppression() {
    echo $undef1;  // @phan-suppress-current-line PhanUndeclaredVariable
    echo $undef2 + missingFn();
}
@phan-suppress-next-line 忽略下一行
function test_line_suppression() {
    // @phan-suppress-next-line PhanUndeclaredVariable, PhanUndeclaredFunction
    echo $undefVar2 + missing_function();  
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31386.html

相关文章

  • 使用 Phan 为你的 PHP 项目保驾护航 - 代码静态扫描

    摘要:比如上面的例子文件文件我们利用做了语法解析检测,代码如下报错哪里类重复了不存在查看该属性是否存在于父类中原理能就是对解析出来的继续做分析,但是前人栽树后人乘凉,这样的完整工具已经有大神帮我们做好了。 原文:我的个人博客 https://mengkang.net/1356.html 工作了两三年,技术停滞不前,迷茫没有方向,不如看下我的直播 PHP 进阶之路 (金三银四跳槽必考,一般人...

    array_huang 评论0 收藏0
  • 使用GrumPHP来纠正代码“毛病”

    摘要:默认的配置不会检测任何代码。参数列表质量检测包其他有人问,你为什么要这么折磨自己呢其实像类型代码质量工具,不是仅仅自己拿来玩的,在开发人员略多的技术团队,可以通过使用它来达到代码规范一致,如果每个人代码都不一样,后果不堪设想。 showImg(https://segmentfault.com/img/bVbtfeF?w=1796&h=724); 前言 我一生的文章都会放在这里,我的博客...

    jubincn 评论0 收藏0
  • ESLint 在中大型团队的应用实践

    摘要:自动化接入和升级方案通过命令行工具提供一键接入升级能力,同时集成到团队脚手架中,大大降低了工程接入和维护的成本。原始代码经过解析器的解析,在管道中逐一经过所有规则的检查,最终检测出所有不符合规范的代码,并输出为报告。 引言 代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到,并或多或少会思考过这一问题。随着前端应用的大型化和复杂化,越来越多的前端工程师和团队开始重...

    alogy 评论0 收藏0
  • 前端模块化的意义

    摘要:而前端要使用模块化的原因或者要解决的问题就是解决命名冲突管理依赖提高代码的可复用性相关模块化规范常见的规范有规范规范是在推广过程中对模块定义的规范化产出,主要用于浏览器端。目前的各类全局变量都可以模块化。 开发中明显可以感觉到加载一个HTML需要依赖很多的JS文件依赖,比如到一定阶段的HTML页面,尾部就是这样的: 随着所需功能越来越多,我们就需引入更多的JS依...

    ThreeWords 评论0 收藏0
  • 【JS基础】一文看懂前端模块化规范

    摘要:参考资料前端模块化详解完整版入门近一万字的语法知识点补充彻底搞清楚中的和和详解 前言 前端的模块化之路经历了漫长的过程,想详细了解的小伙伴可以看浪里行舟大神写的前端模块化详解(完整版),这里根据几位大佬们写的文章,将模块化规范部分做了汇总和整理,希望读完的小伙伴能有些收获,也希望觉得有用的小伙伴可以点个赞,笔芯。 什么是模块 将一个复杂的程序依据一定的规则(规范)封装成几个块(文件)...

    HelKyle 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<