Ground Sunlight

Windowsで作る - Webプログラミングの開発環境(PHP)

ユーザ用ツール

サイト用ツール


サイドバー

メインメニュー

道具箱

リポジトリ編

フレームワーク編

Webサービス編

自然言語処理環境編

メタ
リンク


このページへのアクセス
今日: 1 / 昨日: 0
総計: 29

psr:psr12
編集中

PSR-12: Extended Coding Style

y2sunlight 2020-06-23

本章は、若干の補足を加筆してはいるものの単にPSRのサイトを翻訳したものに過ぎません。英語が堪能な方は原文をご参照下さい。翻訳に当たっては、基本的に機械翻訳を使い、理解できない部分は独断で意訳しております。拙い訳では御座いますが恥を忍んで投稿しておりますので、ご指摘など御座いましたらコメントを頂ければ幸いです。

関連記事


PSR-12: 拡張コーディングスタイル

原文より翻訳 PSR-12: Extended Coding Style 2020-06-30 現在

The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.

このドキュメントのキーワード MUST , MUST NOT , REQUIRED , SHALL , SHALL NOT , SHOULD , SHOULD NOT , RECOMMENDED , MAY 及び OPTIONAL は、 RFC 2119で説明されているように解釈して下さい。


1. 概観

This specification extends, expands and replaces PSR-2, the coding style guide and requires adherence to PSR-1, the basic coding standard.

この仕様は、コーディングスタイルガイドであるPSR-2を継承し、拡張して、置き換えました。基本的なコーディング標準であるPSR-1への準拠を必要とします。

Like PSR-2, the intent of this specification is to reduce cognitive friction when scanning code from different authors. It does so by enumerating a shared set of rules and expectations about how to format PHP code. This PSR seeks to provide a set way that coding style tools can implement, projects can declare adherence to and developers can easily relate to between different projects. When various authors collaborate across multiple projects, it helps to have one set of guidelines to be used among all those projects. Thus, the benefit of this guide is not in the rules themselves but the sharing of those rules.

PSR-2と同様に、この仕様の目的は、さまざまな作成者のコードを読む時の認識の摩擦を減らすことです。 これは、共有された一連のルールと、PHPコードのフォーマット方法に関する期待を列挙することによって行われます。 このPSRは、コーディングスタイルツールが実装できる一連の方法を提供することを目指しており、プロジェクトは遵守を宣言でき、開発者は異なるプロジェクト間で簡単にこれを関連付けることができます。 さまざまな作成者が複数のプロジェクトにわたって共同作業を行う場合、それらすべてのプロジェクト間で1つのガイドラインセットを使用すると役立ちます。 従って、このガイドの利点はルール自体ではなく、それらのルールの共有にあります。

PSR-2 was accepted in 2012 and since then a number of changes have been made to PHP which has implications for coding style guidelines. Whilst PSR-2 is very comprehensive of PHP functionality that existed at the time of writing, new functionality is very open to interpretation. This PSR, therefore, seeks to clarify the content of PSR-2 in a more modern context with new functionality available, and make the errata to PSR-2 binding.

PSR-2は2012年に承認され、それ以降、コーディングスタイルのガイドラインに影響するPHPに多くの変更が加えられました。 PSR-2は、執筆時点で存在していたPHP機能の非常に包括的なものですが、新しい機能は非常に解釈の自由があります。 従って、このPSRは、PSR-2の内容を新しい機能でより近代的なコンテキストで明確にし、エラッタをPSR-2にバインドすることを目的としています。

以前の言語バージョン

Throughout this document, any instructions MAY be ignored if they do not exist in versions of PHP supported by your project.

このドキュメント全体を通して、インストラクションがプロジェクトでサポートされているPHPのバージョンに存在しない場合、それらは無視できます( MAY )。

This example encompasses some of the rules below as a quick overview:

この例では、簡単な概要として以下のルールの一部を取り上げています:

<?php
 
declare(strict_types=1);
 
namespace Vendor\Package;
 
use Vendor\Package\{ClassA as A, ClassB, ClassC as C};
use Vendor\Package\SomeNamespace\ClassD as D;
 
use function Vendor\Package\{functionA, functionB, functionC};
 
use const Vendor\Package\{ConstantA, ConstantB, ConstantC};
 
class Foo extends Bar implements FooInterface
{
    public function sampleFunction(int $a, int $b = null): array
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }
 
    final public static function bar()
    {
        // method body
    }
}


2. 全般

2.1 基本コーディング規約

Code MUST follow all rules outlined in PSR-1.

コードは、PSR-1で概説されているすべてのルールに従う必要があります( MUST )。

The term ‘StudlyCaps’ in PSR-1 MUST be interpreted as PascalCase where the first letter of each word is capitalized including the very first letter.

PSR-1の「StudlyCaps」という用語は、各単語の最初の文字が最初の文字を含めて大文字になっているPascalCaseとして解釈する必要があります( MUST )。


2.2 ファイル

All PHP files MUST use the Unix LF (linefeed) line ending only.

すべてのPHPファイルは、Unix LF(ラインフィード)の行末のみを使用する必要があります( MUST )。

All PHP files MUST end with a non-blank line, terminated with a single LF.

すべてのPHPファイルは、空白以外の行で終わり、単一のLFで終了する必要があります( MUST )。

The closing ?> tag MUST be omitted from files containing only PHP.

PHPのみを含むファイルからは、終了タグ( ?> )を省略しなければなりません( MUST )。


2.3 ライン

There MUST NOT be a hard limit on line length.

行の長さに厳しい制限があってはなりません( MUST NOT )。

The soft limit on line length MUST be 120 characters.

行の長さのソフトな制限は120文字でなければなりません( MUST )。  

Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each.

行は80文字を超えてはいけません( SHOULD NOT )。 それより長い行は、それぞれ80文字以下の複数の後続行に分割する必要があります( SHOULD )。

There MUST NOT be trailing whitespace at the end of lines.

行末に空白があってはいけません( MUST NOT )。

Blank lines MAY be added to improve readability and to indicate related blocks of code except where explicitly forbidden.

明示的に禁止されている場合を除き、読みやすさを向上させ、コードの関連ブロックを示すために、空白行を追加できます( MAY )。

There MUST NOT be more than one statement per line.

1行に複数のステートメントがあってはなりません( MUST NOT )。


2.4 インデント

Code MUST use an indent of 4 spaces for each indent level, and MUST NOT use tabs for indenting.

コードは、インデントレベルごとに4つのスペースのインデントを使用する必要があり( MUST )、インデントにタブを使用してはなりません( MUST NOT )。


2.5 キーワードとタイプ

All PHP reserved keywords and types [1][2] MUST be in lower case.

すべてのPHP予約キーワードとタイプ[1] [2]は小文字でなければなりません( MUST )。

Any new types and keywords added to future PHP versions MUST be in lower case.

将来のPHPバージョンに追加される新しいタイプとキーワードは、小文字でなければなりません( MUST )。

Short form of type keywords MUST be used i.e. bool instead of boolean, int instead of integer etc.

タイプのキーワードは短い形式を使用する必要があります( MUST )。つまり、booleanの代わりにbool、integerの代わりにintなどです。


3. Declare文、名前空間、およびインポート文

The header of a PHP file may consist of a number of different blocks. If present, each of the blocks below MUST be separated by a single blank line, and MUST NOT contain a blank line. Each block MUST be in the order listed below, although blocks that are not relevant may be omitted.

PHPファイルのヘッダーは、いくつかの異なるブロックで構成されている場合があります。 存在する場合、以下の各ブロックは単一の空白行で区切る必要があり( MUST )、空白行を含んではいけません( MUST NOT )。 各ブロックは、以下にリストされている順序でなければなりませんが( MUST )、関連のないブロックは省略できます。

  • Opening <?php tag.
  • File-level docblock.
  • One or more declare statements.
  • The namespace declaration of the file.
  • One or more class-based use import statements.
  • One or more function-based use import statements.
  • One or more constant-based use import statements.
  • The remainder of the code in the file.
  • 開始タグ( <?php )
  • ファイルレベルのdocblock
  • 1つ以上のdeclare文
  • ファイルの名前空間宣言
  • 1つ以上のクラスベースのuseインポート文
  • 1つ以上の関数ベースのuseインポート文
  • 1つ以上の定数ベースのuseインポート文
  • ファイル内の残りのコード

When a file contains a mix of HTML and PHP, any of the above sections may still be used. If so, they MUST be present at the top of the file, even if the remainder of the code consists of a closing PHP tag and then a mixture of HTML and PHP.

ファイルにHTMLとPHPが混在している場合でも、上記のセクションのいずれかを使用できます。 その場合、コードの残りの部分がPHPの終了タグと、その後にHTMLとPHPの混合物で構成されている場合でも、それらはファイルの先頭に存在する必要があります( MUST )。

When the opening <?php tag is on the first line of the file, it MUST be on its own line with no other statements unless it is a file containing markup outside of PHP opening and closing tags.

開始タグ( <?php )がファイルの最初の行にある場合、それがPHPの開始および終了タグの外側のマークアップを含むファイルでない限り、それは他のステートメントを含まない独自の行になければなりません( MUST )。

Import statements MUST never begin with a leading backslash as they must always be fully qualified.

インポート文は常に完全修飾されていなければならないので、決してバックスラッシュで始めてはなりません( MUST NOT )。

The following example illustrates a complete list of all blocks:

次の例は、すべてのブロックの完全なリストを示しています:

<?php
 
/**
 * This file contains an example of coding styles.
 * このファイルには、コーディングスタイルの例が含まれています。
 */
 
declare(strict_types=1);
 
namespace Vendor\Package;
 
use Vendor\Package\{ClassA as A, ClassB, ClassC as C};
use Vendor\Package\SomeNamespace\ClassD as D;
use Vendor\Package\AnotherNamespace\ClassE as E;
 
use function Vendor\Package\{functionA, functionB, functionC};
use function Another\Vendor\functionD;
 
use const Vendor\Package\{CONSTANT_A, CONSTANT_B, CONSTANT_C};
use const Another\Vendor\CONSTANT_D;
 
/**
 * FooBar is an example class.
 * FooBarはサンプルクラスです。
 */
class FooBar
{
    // ... additional PHP code ...
    // ...追加のPHPコード...
}

Compound namespaces with a depth of more than two MUST NOT be used. Therefore the following is the maximum compounding depth allowed:

深さが2を超える複合名前空間は使用してはなりません( MUST NOT )。 従って、許容される最大の合成深度は次のとおりです:

<?php
 
use Vendor\Package\SomeNamespace\{
    SubnamespaceOne\ClassA,
    SubnamespaceOne\ClassB,
    SubnamespaceTwo\ClassY,
    ClassZ,
};

And the following would not be allowed:

また、以下は許可されません:

<?php
 
use Vendor\Package\SomeNamespace\{
    SubnamespaceOne\AnotherNamespace\ClassA,
    SubnamespaceOne\ClassB,
    ClassZ,
};

When wishing to declare strict types in files containing markup outside PHP opening and closing tags, the declaration MUST be on the first line of the file and include an opening PHP tag, the strict types declaration and closing tag.

PHPの開始タグと終了タグの外側のマークアップを含むファイルで厳密なタイプを宣言したい時、宣言はファイルの最初の行にあり、PHPの開始タグ、厳密なタイプの宣言と終了タグを含める必要があります( MUST )。

For example:

例えば:

<?php declare(strict_types=1) ?>
<html>
<body>
    <?php
        // ... additional PHP code ...
        // ...追加のPHPコード...
    ?>
</body>
</html>

Declare statements MUST contain no spaces and MUST be exactly declare(strict_types=1) (with an optional semi-colon terminator).

Declare文にはスペースを含めず( MUST )、正確にdeclare(strict_types=1)(オプションのセミコロンターミネータを伴う)とする必要があります( MUST )。

Block declare statements are allowed and MUST be formatted as below. Note position of braces and spacing:

ブロックdeclare文は許可され、以下のようにフォーマットする必要があります( MUST )。 ブレースの位置と間隔に注意してください:

declare(ticks=1) {
    // some code
}


4. クラス、プロパティ、メソッド

The term “class” refers to all classes, interfaces, and traits.

「クラス」という用語は、すべてのクラス、インターフェース、およびトレイトを指します。

Any closing brace MUST NOT be followed by any comment or statement on the same line.

閉じ括弧の後には、同じ行にコメントまたはステートメントを続けてはなりません( MUST NOT )。

When instantiating a new class, parentheses MUST always be present even when there are no arguments passed to the constructor.

新しいクラスをインスタンス化するとき、コンストラクターに渡される引数がない場合でも、括弧は常に存在している必要があります( MUST )。

new Foo();


4.1 拡張および実装

The extends and implements keywords MUST be declared on the same line as the class name.

extendsキーワードとimplementsキーワードは、クラス名と同じ行で宣言する必要があります( MUST )。

The opening brace for the class MUST go on its own line; the closing brace for the class MUST go on the next line after the body.

クラスの開き括弧は独自の行に配置する必要があります( MUST )。 クラスの閉じ括弧は、本文の後の次の行に配置する必要があります( MUST )。

Opening braces MUST be on their own line and MUST NOT be preceded or followed by a blank line.

開き括弧は独自の行になければならず( MUST )、前後に空白行があってはなりません( MUST NOT )。

Closing braces MUST be on their own line and MUST NOT be preceded by a blank line.

閉じ括弧は独自の行になければならず( MUST )、前に空白行があってはなりません( MUST NOT )。

<?php
 
namespace Vendor\Package;
 
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
 
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}

Lists of implements and, in the case of interfaces, extends MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line.

実装のリスト(インターフェースの場合)および拡張は複数の行に分割されてもよく( MAY )、後続の各行は1回インデントされます。 そうする場合、実装リストの最初の項目は次の行になければならず( MUST )、1行に1つのインターフェースだけにする必要があります( MUST )。

<?php
 
namespace Vendor\Package;
 
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
 
class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}


4.2 トレイトの使用

The use keyword used inside the classes to implement traits MUST be declared on the next line after the opening brace.

トレイトを実装するためにクラス内で使用されるuseキーワードは、クラスの開き括弧の後の次の行で宣言する必要があります( MUST )。

<?php
 
namespace Vendor\Package;
 
use Vendor\Package\FirstTrait;
 
class ClassName
{
    use FirstTrait;
}

Each individual trait that is imported into a class MUST be included one-per-line and each inclusion MUST have its own use import statement.

クラスにインポートされる個々のトレイトは1行に1つずつ含める必要があり( MUST )、各インクルードには独自のuseインポート文が必要です( MUST )。

<?php
 
namespace Vendor\Package;
 
use Vendor\Package\FirstTrait;
use Vendor\Package\SecondTrait;
use Vendor\Package\ThirdTrait;
 
class ClassName
{
    use FirstTrait;
    use SecondTrait;
    use ThirdTrait;
}

When the class has nothing after the use import statement, the class closing brace MUST be on the next line after the use import statement.

クラスがuseインポート文の後に何もない場合、クラスの閉じ括弧は、useインポート文の後の次の行になければなりません( MUST )。

<?php
 
namespace Vendor\Package;
 
use Vendor\Package\FirstTrait;
 
class ClassName
{
    use FirstTrait;
}

Otherwise, it MUST have a blank line after the use import statement.

それ以外の場合は、useインポート文の後に空白行が必要です( MUST )。

<?php
 
namespace Vendor\Package;
 
use Vendor\Package\FirstTrait;
 
class ClassName
{
    use FirstTrait;
 
    private $property;
}

When using the insteadof and as operators they must be used as follows taking note of indentation, spacing, and new lines.

insteadofとas演算子を使用するときは、インデント、空白、改行に注意して、次のように使用する必要があります。

<?php
 
class Talker
{
    use A;
    use B {
        A::smallTalk insteadof B;
    }
    use C {
        B::bigTalk insteadof C;
        C::mediumTalk as FooBar;
    }
}


コメント

コメントを入力. Wiki文法が有効です:
 
psr/psr12.txt · 最終更新: 2020/06/30 14:54 by tanaka