我们很高兴今天能推出我们的PHP官方分析器。PHP一直是我们的用户要求我们支持的最广泛的编程语言之一。这个测试版是我们朝着为该语言建立互联网上最复杂的静态分析体验迈出的第一步。
根据不同的研究公司,在所有已知的服务器端编程语言的网站中,几乎有79%使用PHP。该语言的疯狂流行也来自于它易于学习和开始构建Web应用的事实。一些大型企业已经采用这种语言来构建大规模的应用程序--Facebook、维基百科、Slack、MailChimp、Etsy,当然还有WordPress。
然而,作为一种解释语言,用PHP写代码很容易出现明显的错误,而这些错误通常会被编译器发现。对你的PHP代码使用静态分析可以防止这些明显的错误以及更复杂的问题渗入你的代码库。
认识PHP分析器
在DeepSource,我们努力建立最快和最可靠的静态分析经验。全新的PHP分析器已经建立在快速的基础上,并保证结果中的误报率低于5%。如果你已经是 DeepSource 的用户,只需在你的 PHP 项目.deepsource.toml 文件中添加以下几行,你就可以开始使用了。
[[analyzers]]
name = "php"
enabled = true
在你的代码中防止了50多个问题
在这个版本中,PHP分析器可以在你的源代码中检测出50多个错误风险、反模式、安全漏洞等。下面是其中一些问题的快速预览。
当你试图在数组中使用相同的键时,这将引发一个错误,这可能导致意外的输出。
$user = [
'first_name' => 'John',
'last_name' => 'Doe',
'email' => '[email protected]',
'first_name' => 'Jason', // this would override the previous `first_name` array key's value
];
函数调用的参数不一致
试图在函数调用中传递不正确的参数数量,在做手工代码审查时很容易被忽略。不再是这样了,感谢DeepSource。
function get_user_info($name, $email, $age, $city, $country) {
// code goes here...
}
$result = get_user_info(
'John',
'[email protected]',
20,
'San Francisco'
); // only 4 parameters are passed but function accepts 5, which can lead to an error
nullsafe 通过引用返回
解除引用一个nullsafe链是不允许的,并且会导致运行时错误。这是因为引用需要l值(内存位置,如变量或属性),但nullsafe操作符有时可以返回r值为空。
function (Session $session): void {
fn &() => $session?->user->name; // invalid: cannot dereference a nullsafe chain
};
在自动驾驶仪上格式化你的PHP代码
我们也很高兴发布了我们的官方Transformer for PHP CS Fixer。自动的代码格式化是一个很好的方法,可以确保你所有的代码都遵循相同的标准,而不需要手动格式化任何东西。如果你的项目遵循PHP CS Fixer的风格指南,只需在你的DeepSource配置中添加这两行就可以自动格式化每一次提交。
[[transformers]]
name = "php-cs-fixer"
enabled = true