phpstan 使用指南

https://medium.com/@ondrejmirtes
phpstan
梳理修复找出常见代码问题,输出一个接入文档,开一个分享会与同事小伙伴分享交流,使代码更符合psr4规范。

  1. 安装
    如果是构建在开发环境供自己自测,那么
    composer require --dev phpstan/phpstan
    如果是构建在生产环境,那么
    composer require phpstan/phpstan
    dockerfile文件可能是类似这样子的
FROM ***.cr.aliyuncs.com/kpos/hyperf-base:7.4

RUN apk add php7-pecl-xlswriter --repository http://nl.alpinelinux.org/alpine/edge/testing

WORKDIR /opt/www

COPY ./composer.* /opt/www/

RUN composer install --no-dev -o --prefer-dist \
    && composer clearcache \
    && composer dump-autoload -o

COPY . /opt/www

RUN composer analyse

RUN php bin/hyperf.php

ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]
  "scripts": {
    "analyse": "phpstan analyse --memory-limit 1000M -c phpstan.neon",
  }
  1. 创建一个phpstan.neon文件,并设置最高等级9
parameters:
  level: 9
  paths:
      - src

2.1 开启严格模式
composer require phpstan/phpstan-strict-rules

includes:
    - vendor/phpstan/phpstan-strict-rules/rules.neon
  1. 忽略报错
ignoreErrors:
      - '#with no value type specified in iterable type array.#'

reportUnmatchedIgnoredErrors

  1.     /**
         * @return Collection|Payment[]
         */
        public function getPayments(array $codes): Collection
        {
            return Payment::query()->whereIn('code_name', $codes)->get();
        }
    
    /**
     * @return Collection<Payment>
     */
    public function getPayments(array $codes): Collection
    {
        return Payment::query()->whereIn('code_name', $codes)->get();
    }
  1. Baseline

有时候用的phpstan版本很旧,升级之后发现了几百几千个错误,这个时候可以直接使用Baseline,旧代码就等以后有时间再改,新的代码就将遵循更高的标准来开发。

vendor/bin/phpstan analyse --level 9 --configuration phpstan.neon src --generate-baseline

然后phpstan.neon文件增加一句

includes:
  - phpstan-baseline.neon

All posts

Other pages

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注