首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态类型检查a-la PhpStorm

静态类型检查a-la PhpStorm
EN

Stack Overflow用户
提问于 2014-01-27 22:03:03
回答 2查看 3.3K关注 0票数 14

我是一个强类型的语言支持者,但我正在从事一个大型的PHP项目。

我一直在使用PhpStorm,我很喜欢提示您可以提供的额外类型,下面的评论如下:

代码语言:javascript
复制
/** @var \Payments $payment */

/** @property \Payments $payment */

PhpStorm很棒,因为当类型不匹配时,它会给您一些警告。

我想知道是否有可能在之外静态地进行这种检查,是一些类型的命令行预编译器,它将遍历代码,检查那些额外的提示,以便在检测到不匹配时显示一些错误。

是用phpcs可以做的事情吗?

我的最终目标是有一个自动工具来提醒我输入不匹配.

我甚至考虑切换到HHVM,以便有更好的类型暗示。但我不相信HHVM还能在生产中运行。

理想情况下,最好在HHVM上开发额外的类型提示,但是代码不会运行在我想要继续生产的Zend引擎上。

有什么想法吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-06 03:07:02

对于静态代码分析,特别是帮助进行类型错误检测,可以使用以下工具

CodeSniffer是编码标准检查器,对类型错误检测没有太大帮助。

票数 10
EN

Stack Overflow用户

发布于 2014-01-30 09:24:50

自动检查类型不匹配

Phantm

如果要检查代码中的类型不匹配,可以使用Phantm。您可以在詹金斯svn钩子后提交中使用它。

来自官方网站

Phantm是用Scala编写的工具,可用于检测PHP应用程序中潜在的编程错误。它既适用于小型孤立脚本,也适用于成熟的应用程序。phantm代表“类型错误的PHp ANalyzer”。

Phantm需要

代码语言:javascript
复制
ant
sbt
Java 1.6 or higher
Scala 2.9.1 or higher

使用

代码语言:javascript
复制
$ ./phantm <target.php>

PHPLint

另一种检查php代码类型不匹配的方法是PHPLint。您可以将它与Jenkins、svn或其他工具一起使用。

来自官方网站

PHPLint是PHP4和PHP5程序的验证器和文档程序。PHPLint通过透明的元代码扩展了PHP语言,这些元代码可以驱动解析器对源代码进行更严格的检查。PHPLint不仅仅是一个检查器:它实现了一种新的、强类型的、在PHP语言之上实现的语言。您可以用PHPLint从头开始构建程序,也可以检查和修复现有的程序,或者遵循快速和肮脏的PHP编程方式,然后在程序完成后添加PHPLint元代码。无论您选择什么策略,PHPLint都会使您的程序更安全、更有保障、更好地记录在案,并且具有更少的bug。PHPlint祝您在线测试工具愉快。

有关使用PHPLint处理类型的更多信息

使用

代码语言:javascript
复制
  $ phplint <target.php>

手动检查类型不匹配

如果要使用PHPStorm检查变量类型,则使用可以使用PHPDoc元数据。。但是更好地使用php用于此:您可以启用E_NOTICE来报告未初始化的变量,用于捕获变量名拼写错误。在此之后,您可以使用实例检查您的函数:

代码语言:javascript
复制
/**
 * @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 方法编写正确的代码时。非常好的解决方案,您可以在正式php文档PHPUnit官员阅读。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21392651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档