PHPCS规则类型提示

时间:2017-04-06 08:38:50

标签: php-7.1 phpcs

是否有规则检查类型提示的所有函数?

/**
 * Set the part name.
 *
 * @param   string    $name   The part name.
 */
public function setName(string $name) : void
{
    $this->name = $name;
}

因此,例如,它必须在参数前面有一个类型,并且函数必须具有指定的返回类型。

1 个答案:

答案 0 :(得分:4)

2019更新 - 更智能

随着时间的推移,我之前的回答 - TypeHintDeclarationSniff - 显示出非常错误。具体来说:

 public function anotherMethod(int $value)
 {
     // $value is known integer
     $this->someMethod($value);
 }


 /**
  * @param string $value
  */
-private function someMethod($value)
+private function someMethod(string $value)  // here should be "int"
 {
 }

错过的案例:

public function getItems() // here should be "array"
{
    return ['Statie', 'EasyCodingStandard', 'Rector'];
}

或者:

public function getResult() // here should be "float"
{
    if (true) {
        return 5.2;
    }

    return 5.3;
}

甚至可以在/vendor中使用父类型中断代码。为什么?因为它基于字符串和令牌,而不是代码的静态分析。

在我向他们推荐这个嗅闻之后,这让很多人非常生气。明显。

如何做得更好?

我写了一个名为Rector(https://github.com/rectorphp/rector)的工具,它考虑了其他变量和其他类及其类型。

这样,您就可以在没有任何@param@return注释的情况下为代码完成类型声明。

如何使用它?

安装:

composer require vendor/bin/rector 

设置rector.yaml config:

# rector.yaml
services:
    Rector\Php\Rector\FunctionLike\ParamTypeDeclarationRector: ~
    Rector\Php\Rector\FunctionLike\ReturnTypeDeclarationRector: ~

使用:

vendor/bin/rector process src --dry-run # preview
vendor/bin/rector process src # change

那就是它!

在幕后阅读

初步回答

您可以使用TypeHintDeclarationSniff中的 Slevomat/CodingStandard 进行此操作。

我使用它超过一年,它完美无缺。