使用composer安装
composer global require phan/phan
如果报ast错
安装php-ast扩展:
pecl install ast
如果不能安装扩展,需要把pecl的路径加入到php配置里
查看pecl安装位置
pear config-get php_dir
把路径加入都php.ini都include_path里面
查看pear版本号
pear version
安装成功会在目录下有
~/.composer/vendor/bin
配置config.php
要运行phan,需要创建config.php文件,文件指定了当前php版本,静态分析的目录,忽略的目录,使用的插件等。在对应的项目下,创建./phan目录,将config.php文件放入此目录下。我的config.php如下
**
* This configuration will be read and overlaid on top of the
* default configuration. Command line arguments will be applied
* after this file is read.
*/
return [
// Supported values: '7.0', '7.1', '7.2', '7.3', null.
// If this is set to null,
// then Phan assumes the PHP version which is closest to the minor version
// of the php executable used to execute phan.
"target_php_version" => 7.1,
// A list of directories that should be parsed for class and
// method information. After excluding the directories
// defined in exclude_analysis_directory_list, the remaining
// files will be statically analyzed for errors.
//
// Thus, both first-party and third-party code being used by
// your application should be included in this list.
'directory_list' => [//指定运行语法分析的目录
'demo/',
],
// A directory list that defines files that will be excluded
// from static analysis, but whose class and method
// information should be included.
//
// Generally, you'll want to include the directories for
// third-party code (such as "vendor/") in this list.
//
// n.b.: If you'd like to parse but not analyze 3rd
// party code, directories containing that code
// should be added to the `directory_list` as
// to `exclude_analysis_directory_list`.
"exclude_analysis_directory_list" => [//指定忽略的目录
'test/',
],
// A list of plugin files to execute.
// See https://github.com/phan/phan/tree/master/.phan/plugins for even more.
// (Pass these in as relative paths.
// Base names without extensions such as 'AlwaysReturnPlugin'
// can be used to refer to a plugin that is bundled with Phan)
'plugins' => [
// checks if a function, closure or method unconditionally returns.
// can also be written as 'vendor/phan/phan/.phan/plugins/AlwaysReturnPlugin.php'
'AlwaysReturnPlugin',
// Checks for syntactically unreachable statements in
// the global scope or function bodies.
'UnreachableCodePlugin',
'DollarDollarPlugin',
'DuplicateArrayKeyPlugin',
'PregRegexCheckerPlugin',
'PrintfCheckerPlugin',
],
];
https://github.com/phan/phan
执行命令
~/.composer/vendor/bin/phan -k 你的路径/.phan/config.php -o 你的路径/.phan/output