- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
静态扫描为你的PHP项目上线保驾护航
展开查看详情
1 .静态扫描为 PHP 项⽬目保驾护航 周梦康 2019.04.20
2 .⾃自我介绍 多个开源项⽬目 tipi、yar-java、doc-php 的作者与参与者 阿⾥里里云⾼高级开发⼯工程师 博客 https://mengkang.net
3 .⽬目录 Why 为什什么要代码静态扫描 How 怎么去做代码静态扫描 What 发布与集成测试的成果
4 .什什么是静态扫描 # static-analysis # static-code-analysis # static-program-analysis 程序静态分析是指在不不运⾏行行代码的⽅方式下,通过词法分析、语法分 析、抽象语法树分析等技术对程序代码进⾏行行扫描,验证代码是否满⾜足规 范性、安全性、可靠性、可维护性等指标的⼀一种代码分析技术。 # 静态分析 # 静态扫描 # 静态代码扫描 # 静态代码分析 # 程序静态分析 https://en.wikipedia.org/wiki/Static_program_analysis https://baike.baidu.com/item/程序静态分析/1968823
5 .PHP 项⽬目为什什么需要做静态扫描 1 弱类型与⽆无类型声明 PHP 7 引⼊入类型声明 2 解释性语⾔言实时编译 3 丰富的包、递归依赖
6 .弱类型(泛型返回值)错把数组当对象 Call to a member function getUserId() on a non-object
7 .返回值⽆无类型声明 错把对象当数组 Cannot use object of type Entity\Article as array
8 .类继承成员变量量访问级别覆盖
9 .版本兼容性问题 背景:接⼿手⾮非常⽼老老的项⽬目进⾏行行维护 不不⼩小⼼心使⽤用了了不不存在的语法糖 [] ?? ?: 顺⼿手写了了不不存在的函数 array_column 写了了不不⽀支持的语法 empty(xx_function($x))
10 .PHP 的运⾏行行时编译优势与隐患 php Zend 编译器器 opcode 物理理机 code 虚拟机
11 .PHP 的运⾏行行时编译优势与隐患 类型约束差⻛风险⾼高 代码 写的快 模糊kv多影响语义 ⻛风⼀一样 的 ⾯面向对象思想缺失 美男⼦子 编译快 部署快 上下⽂文解析隐患
12 .PHP 7 新特性 参数类型、返回值类型声明
13 .PHP 7.4 类成员变量量类型声明 https://wiki.php.net/rfc/typed_properties_v2
14 .PHP 解析⼩小互动 为什什么 a.php 看不不到错误 b.php 却可以
15 .PHP 包管理理⼯工具的发展 Composer Pear 的⾰革命者,使⽤用⽅方便便 ⽽而且兼容 Pear,依赖关系更更清晰 Pear2 Pear 的升级版 使⽤用 Pyrus 新⼀一代的包管理理器器 Pecl C/C++ 扩展包仓库 编译安装后随PHP载⼊入内存 Pear PHP 4.04 开始随核⼼心包⼀一起分发 初衷是模仿Perl社区共享代码的套路路 1999 2004 2009 2012
16 .PHP 项⽬目发展背后的潜在⻛风险 composer create-project --prefer-dist laravel/laravel blog ⽂文件数 5927 代码⾏行行数 47万 语法检测、类型推断等 ⼈人⼯工检查 ⼼心有余⽽而⼒力力不不⾜足
17 .⽬目录 Why 为什什么要代码静态扫描 How 怎么去做代码静态扫描 What 发布与集成测试的成果
18 .⼯工具选择 - PHPStan https://github.com/phpstan/phpstan
19 .⼯工具选择 - PHPSA https://github.com/ovr/phpsa
20 .⼯工具选择 - Phan https://github.com/phan/phan
21 .依托 PHP-Parser ⾃自⼰己造轮⼦子 https://github.com/nikic/PHP-Parser
22 .依托 PHP-Parser ⾃自⼰己造轮⼦子
23 .使⽤用 Phan 安装 php-ast 扩展 https://github.com/nikic/php-ast composer require phan/phan
24 .⽬目录 Why 为什什么要代码静态扫描 How 怎么去做代码静态扫描 What 发布与集成测试的成果
25 .使⽤用 Phan 简单扫描
26 .使⽤用 Phan 简单扫描
27 .使⽤用 Phan 扫描项⽬目 ./vendor/bin/phan --init --init-level=3 ./vendor/bin/phan --progress-bar
28 .使⽤用 Phan 扫描项⽬目
29 .项⽬目发布实践 - AoneFlow 分⽀支管理理