【问题标题】:Is there a rule for enforcing strict comparison (===) using PHP Code Sniffer?是否有使用 PHP 代码嗅探器强制执行严格比较 (===) 的规则?
【发布时间】:2020-08-24 14:02:31
【问题描述】:

正如标题所说。我正在寻找类似于 eslint 的 eqeqeq 的规则,但适用于 PHP。我想强制使用===/!== 而不是==/!=

我也尝试过谷歌搜索并搜索了他们的仓库,但不幸的是无济于事。只是想在这里询问是否有人知道我在 Github 上打开问题之前错过的规则:)

【问题讨论】:

    标签: php phpcs phpcodesniffer


    【解决方案1】:

    尝试包括Squiz.Operators.ComparisonOperatorUsage 嗅探。它强制执行严格的类型比较,包括禁止使用!$foo 来支持=== false

    它还禁止隐式真实比较,因此您不能执行 if ($foo) 之类的操作,但您可以通过排除 Squiz.Operators.ComparisonOperatorUsage.ImplicitTrue 错误代码来禁用它,如果它对您的标准来说过于严格。

    【讨论】:

      【解决方案2】:

      Slevomat Coding Standard 包含专门用于禁止松散比较运算符的规则。

      安装

      通过 Composer 全局安装编码标准或本地安装到您的项目目录。

      composer global require slevomat\coding-standard

      composer require slevomat\coding-standard --dev

      参考

      phpcs 通常通过phpcs.xml 文件进行配置。使用 config 标签在此文件中添加对 slevomat 编码标准的引用。

      <ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PHP_CodeSniffer" xsi:noNamespaceSchemaLocation="phpcs.xsd">
          <config name="installed_paths" value="{path}"/>
      ...
      </ruleset>
      

      如果全局安装,{path} 值可能是绝对路径,如果安装在项目中,则可能是相对路径。

      C:\Users\{username}\AppData\Roaming\Composer\vendor\slevomat\coding-standard

      vendor\slevomat\coding-standard

      配置

      这是配置的 phpcs.xml 文件的示例。我已经告诉 phpcs 使用 PSR2 规则并使用 Slevomat 编码标准中的 DisallowEqualOperators 规则。

      <ruleset ...>
          <config name="installed_paths" value="vendor\slevomat\coding-standard"/>
      
          <!-- Add your rules below this line -->
      
          <!-- Use the PSR2 rules that are included with phpcs. -->
          <rule ref="PSR2">
      
          <!--
              https://github.com/slevomat/coding-standard#slevomatcodingstandardoperatorsdisallowequaloperators-
              Disallows using loose == and != comparison operators. Use === and !== instead, they are much more secure and predictable.
          -->
          <rule ref="SlevomatCodingStandard.Operators.DisallowEqualOperators"/>
      </ruleset>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多