ホームページ  >  記事  >  バックエンド開発  >  手書きPHP APIフレームワーク(1) PSR仕様

手書きPHP APIフレームワーク(1) PSR仕様

藏色散人
藏色散人転載
2023-02-10 10:31:113410ブラウズ

この記事は、PHP に関する関連知識を提供します。主にコーディング標準について説明します。また、開発中に標準に従うよう努めることをお勧めします。興味のある友人は一緒に見てみると良いでしょう。そうなることを願っています。みんな助けてくれます。

作成当初の意図

  • CURD の使用に飽きていませんか?
  • さまざまなフレームワークは少し面倒ですか?
  • 自分でフレームワークを設計してみたことはありますか?
  • PHP 構文を学習しましたが、それを実践して強固な基礎を築くためのプロジェクトがありません

これが、あなたのフレームワークを迅速に構築するのに役立つことを願っています仕事や勉強に何らかのメリットをもたらす可能性があります。助けとインスピレーションを求めに来てください。

何が学べるのか

  • PSR仕様

  • composerの使用法

  • API インターフェイス フレームワークを迅速に構築

  • ##さまざまなデータ型の Redis アプリケーション

  • ##キャッシュ アプリケーション分析
  • フレームワークを開発する前に、フレームワーク開発に伴う仕様について説明します。
ほとんどのプログラミング言語には独自のコーディング標準があり、「世界最高の言語」である PHP には確かに独自のコーディング標準があります。この仕様は PHP 標準勧告 (略して PSR) です。

もちろん、私自身の仕事から、多くの PHP プログラマー、特にジュニア プログラマーは、PHP にそのような仕様があることを知らないことがわかりました。

PSR とは何ですか?

PSR を紹介する前に、この仕様を策定した組織である PHP-FIG を紹介する必要があります。正式名称は PHP Framework Interoperability です。 組織のメンバーは仕様を策定し、独自のプロジェクトに実装します。公式の組織ではありませんが、CakePHP、Composer、Drupal、PEAR、Slim、Yii フレームワーク、Zend などのほとんどの PHP コミュニティ プロジェクトを代表しています。フレームワークが待機します。そして、ますます多くのプロジェクトがこの標準に参加し、準拠しています。

PSR プロジェクトの目的は、フレームワーク作成者またはフレームワークの代表者間の議論を通じて、制限レベルが最も低いコラボレーション標準を開発することです。各フレームワークは、エンジニアがより適切に連携できるように、統一されたコーディング標準に従っています。

これまでに公式サイトに掲載されているアイテムは20点ですが、ドラフト中やボツになったものを除くと以下の13点となります。

これらの仕様を見てみましょう: 手書きPHP APIフレームワーク(1) PSR仕様


PSR-1 基本コーディング仕様

PHP コード ファイルは

PHP コード ファイルは BOM なしで UTF-8 でエンコードする必要があります
  • PHP コードは For 宣言のみを定義する必要がありますクラス、関数、定数などの操作、または副作用を引き起こすその他の操作 (ファイル出力の生成や .ini 構成ファイルの変更など) の場合は、2 つのうちの 1 つだけを選択できます。名前空間とクラスは PSR に準拠する必要があります。自動読み込み仕様 PSR-4
  • クラスの命名は、大文字で始まる StudlyCaps スタイルのキャメル ケース命名仕様に従う必要があります。
  • 定数のすべての文字クラスは大文字にする必要があり、単語はアンダースコアで区切る必要があります。
  • メソッド名は、小文字で始まるキャメルケース スタイルのキャメルケース命名規則に準拠する必要があります
  • PSR-12コード スタイル仕様
  • PSR-12 仕様は非常に詳細で、宣言、名前空間、クラスと継承、および制御構造の説明が含まれています。

最初にデモを見てみましょう:

<?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
    }
}

コードは [PSR-1] のコーディング仕様に従う必要があります

すべての PHP ファイルは Unix を使用する必要があります行終了文字として LF (改行);

すべての PHP ファイルは空行で終わる必要があります;
  • 純粋な PHP コード ファイルは最後の ?> 終了タグを省略する必要があります
  • 理論的には、120 文字を超えてはなりませんが、厳密な制限はありません。空白行以外の行の後に余分なスペースがあってはなりません。
  • 空行 これによりコードが読みやすくなり、コードのブロックに役立ちます。
  • 1 行に複数のステートメントを含めることはできません
  • コードは 4 つのスペースでインデントする必要があり、タブ キーは使用しないでください
  • すべての PHP キーワードは次のとおりである必要があります。すべて小文字
  • コントロール構造の基本仕様は次のとおりです:
  • 控制结构关键词后必须有一个空格。
    左括号 ( 后一定不能有空格。
    右括号 ) 前也一定不能有空格。
    右括号 ) 与开始花括号 { 间一定有一个空格。
    结构体主体一定要有一次缩进。
    结束花括号 } 一定在结构体主体后单独成行。复制代码
  • コード スタイルの仕様は多数あるため、ここでは 1 つずつ説明しません。自分で読んでください。
  • # PSR-4 オートローディング

# ファイル パスから対応するクラスを自動的にロードするための関連仕様については、この仕様は相互運用可能であり、補足として使用できます。さらに、この PSR には、自動ロードされたクラスに対応するファイル ストレージ パスの仕様も含まれます。

ここでの「クラス」とは、すべてのクラス、インターフェイス、特性の再利用可能なコード ブロック、およびその他の同様の構造を指します。

#完全なクラス名は次の構造にする必要があります:
     \(\)*\
  • 完全なクラス名は
  • 先頭に-が必要です。 「ベンダー名前空間」と呼ばれるレベル名前空間;
    • 完全なクラス名
    • には 1 つ以上のサブ名前空間を持つことができます;

      ##完全なクラス名
    • は最終クラス名を持たなければなりません;

      完全なクラス名のどの部分のアンダースコアにも特別な意味はありません;
  • #完全なクラス名 は、任意の大文字と小文字で構成できます。

  • #すべてのクラス名は、

    でなければなりません 大文字と小文字が区別されます。

  • #完全なクラス名に基づいて該当するファイルをロードする場合...
    • 完全なクラス名では、最初の名前空間区切り文字、その前にある 1 つ以上の連続する名前空間およびサブ名前空間は、「名前空間プレフィックス」として、少なくとも 1 つの「ファイル ベース ディレクトリ」に対応している必要があります;
    • 名前空間プレフィックスの直後のサブ名前空間
    • は、対応する「ファイル ベース ディレクトリ」と

      一致する必要があり、その中の名前空間区切り文字がディレクトリ区切り文字として使用されます。

    • の末尾のクラス名
    • は、接尾辞

      .php が付いた対応するファイルと同じ名前でなければなりません。

      オートローダーの実装
    • は例外をスローしてはならず、
    • いかなるレベルのエラー メッセージもトリガーしてはならず、

      すべき 戻り値があります。 #例

    • 次の表は、仕様に準拠した完全なクラス名、名前空間プレフィックス、およびファイル ベース ディレクトリに対応するファイル パスを示しています。 。
  • #完全なクラス名

    名前空間プレフィックス

    ファイル ベース ディレクトリファイル パス./acme-log-writer/lib/./acme-log-writer/lib/File_Writer.php/path/to/aura-web/src/Response/Status.php./vendor/Symfony/Core/Request.php\Zend\AclZend/usr/includes/Zend//usr/includes/Zend/Acl.php#当面は、よく使われるこの 3 つの仕様のみを紹介します。 このセクションでは主に PHP コーディング仕様 PSR を紹介します。開発中はこの仕様に従うよう努めることをお勧めします。 , 特にチームで開発する場合は、それぞれが独自のコーディングスタイルを持つのではなく、できるだけスタイルを統一する必要があります。 PHP-FIG 組織の当初の目的が述べたように、彼らが確立した仕様は、全員のコーディングの自由を制限することではなく、より良く連携できるように共通点を見つけることです。
    #\Acme\Log\Writer\File_Writer Acme\Log\Writer
    \Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/
    \Symfony\Core \ Request Symfony\Core ./vendor/Symfony/Core/
    クリックして最新の仕様提案を表示します
    推奨学習: 「

    PHP ビデオ チュートリアル

    以上が手書きPHP APIフレームワーク(1) PSR仕様の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。