ely/php-code-style

用于 Ely.by PHP 项目开发的 PHP-CS-Fixer 规则集

1.0.1 2023-07-21 04:12 UTC

This package is auto-updated.

Last update: 2024-08-24 03:56:07 UTC


README

用于 Ely.by PHP 项目开发的 PHP-CS-Fixer 规则集。适用于 PHP 7.4 及以上版本。

Latest Version on Packagist Total Downloads Software License Build Status

安装

首先,使用 PHP-CS-Fixer 通过 composer 安装 Ely.by PHP-CS-Fixer 规则

composer require --dev friendsofphp/php-cs-fixer ely/php-code-style

然后创建一个包含以下内容的文件 .php-cs-fixer.php

<?php
$finder = \PhpCsFixer\Finder::create()
    ->in(__DIR__);

return \Ely\CS\Config::create()
    ->setFinder($finder);

这样就完成了。你现在可以使用以下命令查找代码风格违规

vendor/bin/php-cs-fixer --diff --dry-run -v fix 

然后使用以下命令完全修复它们

vendor/bin/php-cs-fixer fix

配置

您可以将自定义规则集传递给 \Ely\CS\Config::create() 调用。例如,它可以用于验证与 PHP 7.4 兼容的项目

<?php
return \Ely\CS\Config::create([
    'trailing_comma_in_multiline' => [
        'elements' => ['arrays', 'arguments'],
    ],
])->setFinder($finder);

代码风格

我们的代码风格主要基于 PSR-2,同时借鉴了 PSR-12 的一些想法,并进行了一些修改。

示例

此示例包含以下规则的一些示例,以快速概述

<?php
declare(strict_types=1);

namespace Vendor\Package;

use Vendor\Package\SomeNamespace\ClassA;

class Foo extends Bar implements FooInterface {
    use SomeTrait;

    private const SAMPLE_1 = 123;
    private const SAMPLE_2 = 321;

    public $field1;

    public Typed $field2;

    public function sampleFunction(
        int $a,
        private readonly int $b = null,
    ): array {
        if ($a === $this->b) {
            $result = bar();
        } else {
            $result = BazClass::bar($this->field1, $this->field2);
        }

        return $result;
    }

    public function setToNull(): self {
        $this->field1 = null;
        return $this;
    }

}

主要差异

  • 类的大括号必须 在同一行

  • 方法的大括号必须 在下一行

其他规则

  • return 语句之前必须有一个空行,除非只有一个语句在其之前。

    <?php
    
    function a() {
        $a = '123';
        return $a . ' is a number';
    }
    
    function b() {
        $a = '123';
        $b = 'is';
    
        return $a . ' ' . $b . ' a number';
    }
  • 类体周围必须有一个空行,但匿名类体周围不能有空行。

    <?php
    class Test {
    
        public function method() {
            $obj = new class extends Foo {
                public function overriddenMethod() {
                    // code body
                }
            };
        }
    
    }
  • 必须声明所有方法、属性和常量的可见性。

  • ifswitchforforeachwhiledo-while 体之后必须有一个空行。

    <?php
    if (true) {
        // some actions here
    }
    
    echo 'the next statement is here';
  • 多行函数参数周围不能有对齐。

    <?php
    function foo(
        string $input,
        int $key = 0,
    ): void {}