我是一个强类型语言支持者,但我正在开发一个大型PHP项目。
我一直在使用PhpStorm,我喜欢你能提供的额外类型提示,并提供以下评论:
/** @var \Payments $payment */
/** @property \Payments $payment */
PhpStorm很棒,因为它在类型不匹配时会给你一些警告。
我想知道是否有可能在PhpStorm之外静态地进行这种检查。 一些类型的命令行预编译器将通过代码,检查那些额外的提示,以便在检测到不匹配时显示一些错误。
这可以用 phpcs 完成吗?
我的最终目标是拥有一个自动工具,提醒我类型不匹配。
我甚至考虑转换到HHVM以获得更好的类型提示。但我不相信HHVM还没有投入生产。
理想情况下,在HHVM上开发额外的类型提示会很棒,但是代码不会在我想继续生产的Zend PHP引擎上运行。
有什么想法吗?
感谢。
答案 0 :(得分:10)
对于静态代码分析,特别是帮助进行类型错误检测,可以使用
等工具PHPCS aka PHP_CodeSniffer是编码标准检查程序,对类型错误检测没有多大帮助。
答案 1 :(得分:4)
<强> Phantm 强>
如果您想检查代码是否存在类型不匹配,可以使用 Phantm 。您可以将其与Jenkins一起使用,也可以与svn hook post-commit一起使用。
来自官方网站
Phantm是一个用Scala编写的工具,可用于检测PHP应用程序中潜在的编程错误。它既适用于小型孤立脚本,也适用于完整的应用程序。 phantm代表“PHp ANalyzer for Type Mistakes”。
Phantm 需要
ant
sbt
Java 1.6 or higher
Scala 2.9.1 or higher
<强>用法强>
$ ./phantm <target.php>
<强> PHPLint 强>
检查PHP代码类型不匹配的另一种方法是PHPLint。您可以将它与Jenkins,svn或其他工具一起使用。
来自官方网站
PHPLint是PHP 4和PHP 5程序的验证器和记录器。 PHPLint通过透明的元代码扩展了PHP语言,可以使解析器更加严格地检查源代码。 PHPLint不仅仅是一个检查器:它实现了一种通过PHP语言实现的新的强类型语言。您可以考虑使用PHPLint从头开始构建程序,或者可以检查和修复现有程序,或者您可以按照快速而简单的PHP编程方式,然后在程序完成后再添加PHPLint元代码。无论您选择何种策略,PHPLint都可以使您的程序更安全,更安全,记录更少,并且可以减少错误。 PHPlint很不错online test tool。
有关 working with types by PHPLint
的详情<强>用法强>
$ phplint <target.php>
如果要使用PHPStorm you can use PHPDoc metadata检查变量类型。但更好的方法是使用php for this:您可以为报告未初始化的变量启用E_NOTICE以捕获变量名称拼写错误。之后,您可以在函数中使用实例检查:
/**
* @param array $data - highlight for PHPStorm
* @param MySuperClass $row - highlight for PHPStorm
*/
function(array $data, MySuperClass $row)
{
// Error if $data is not an array
// Error if $row is not instance of MySuperClass
/* do something .... */
}
/**
* @param array $data - highlight for PHPStorm
* @param MySuperClass $row - highlight for PHPStorm
*/
function($data, $row)
{
if (!is_array($data))
{
throw new TypeException('$data is must be array');
}
if (!($row instanceof MySuperClass))
{
throw new TypeException('$data is must be array');
}
}
当开发人员使用TDD方法撰写正确的代码时,我认为是最佳方式。 非常好的解决方案,您可以在official php documentation或PHPUnit official阅读。