検索

Battle of the Autoloaders: PSR-0 vs. PSR-4

自動車局の戦い:PSR-0対PSR-4

キーテイクアウト

  • PSR-0とPSR-4はPHPの自動測定基準であり、PSR-0はクラスの名前空間に基づいてパスを定義し、クラス名のアンダースコアを許可します。 0.
  • パッケージ指向のオートローディングと呼ばれる
  • PSR-4は、よりクリーンなパッケージを可能にしますが、実装がより複雑です。また、オートローダーが例外を投げたり、エラーを引き起こしたりして、複数のオートローダーとの互換性を維持しないようにします。
  • PHPトレーニングの初心者の段階を通過した場合、PSR-0を聞いたことがあります。これは、必要や含めるなどのステートメントを使用せずにコードにPHPクラスを自動的に含める方法を定義する自動ローディング標準です。
psr-0

PSR-0は、クラスの名前空間を見て、その情報からハードドライブ上の位置を識別します。たとえば、クラスのZendMailMessageは/Path/to/Project/lib/vendor/zend/mail/message.php。

につながります

PSR-0は、5.2以前の移行を容易にするために、代替としてクラス名のアンダースコアもサポートしています。 zend_mail_messageは/path/to/project/lib/vendor/zend/mail/message.php。

にもつながります

作曲家

Composerが現れてPHPパッケージ管理の世界を席巻したとき、状況は変わりました。いくつかのルールのために、フォルダーはしばしば複製され、Composerを介してPSR-0クラスのインストールを見ると深くなりすぎました。たとえば、一部のフォルダー構造は次のようになりました:

これはせいぜい混oticとしています。なぜなら:

vendor/
    vendor_name/
        package_name/
            src/
                Vendor_Name/
                    Package_Name/
                        ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                Vendor_Name/
                    Package_Name/
                        ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest

「SRC」および「テスト」ディレクトリには、ベンダーとパッケージのディレクトリ名を含める必要があります。これは、PSR-0コンプライアンスのアーティファクトです。

したがって、いくつかの高度に資格のあるPHP開発者が集まって、新しい標準の提案をまとめました:psr-4。

psr-4

PSR-4は、必要に応じてPSR-0を補完し、協力することを目指しています。完全に置き換えるわけではありません。それはできますが、そうする必要はありません。 PSR-4の主な目標は、PSR-0の残骸と5。3日前の残骸を完全に除去し、より簡潔なフォルダー構造を可能にすることです。 PSR-4を使用すると、上記のフォルダーツリーが次のようになります:

PSR-0のアップグレードはオプションではありませんでした

これは非常に重要です。これは、PSR-4の実装を実装しながら、よりクリーンなパッケージを許可しているが、実装がはるかに複雑になることを意味します。 PSR-4パッケージ指向のオートローディングを呼び出します。これは、シンプルさの前にパッケージの清潔さを支持するためです。

選択されたアプローチ

提案された目標は次のとおりです。すべてのパッケージに少なくとも2つの名前空間レベル(ベンダーとパッケージ)が含まれている必要があることをPSR-0ルールに保ち、ベンダーパッケージコンボが任意のフォルダーにマッピングできることを確認し、INFIXを許可しますベンダーパッケージのコンボと、完全に資格のあるクラス名の残りの間のフォルダー。

これは、クラスをパッケージコードのどこにでも配置できることを意味します。これは、人間としての意味があります。 さらに、ドラフトは、複数のオートローダーが登録される可能性があるという理由だけで、PSR-4オートローダーが例外をスローしたりエラーを引き起こすことはないことを明示的に述べています。エラーとフローを停止すると、この互換性が壊れます。障害に関する追加情報が必要な場合は、PSR-3互換のロガーまたはその他の任意の手段を使用する必要があります。

例ファイルに示されているように、PSR-4オートローダーを使用して次の構造からクラスをロードします。

は次のようになります:

新しいfoobarquxquuxを呼び出す場所;新しいfoobarquxquuxtestで、最初の登録ディレクトリからロードしようとします。 2番目からロードしようとします

この例は、単一の名前空間ごとの複数のフォルダーの使用も示しています。
vendor/
    vendor_name/
        package_name/
            src/
                Vendor_Name/
                    Package_Name/
                        ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                Vendor_Name/
                    Package_Name/
                        ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
結論

オートローディングには銀の弾丸はありません。それぞれのアプローチには、長所と短所があります。PSR-4は、より単純なフォルダー構造を可能にしますが、完全に資格のある名前を見るだけでクラスの正確なパスを知ることができません。一方、PSR-0はハードドライブで混oticとしていますが、過去に立ち往生している開発者をサポートしています(クラスの名前のアンダースコアユーザー)。その名を見るだけでクラスの場所を識別するのに役立ちます。
vendor/
    vendor_name/
        package_name/
            src/
                ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest

PSR-4についてどう思いますか?以下のコメントでお知らせください。または、多くの議論の1つであなたの意見を表明してください。

どちらの方法でも、どちらにしても、パッケージ指向のオートローディングがここに留まることは間違いありません。正式に標準として受け入れられない場合は、それを必要とする人々によって実装されたカスタム。議論に参加し、この正式な状態に到達するのに十分な概念を改善するのは私たち次第です。

PSR-0およびPSR-4オートローディング

に関するよくある質問

はい、同じプロジェクトでPSR-0とPSR-4の両方を使用することが可能です。ただし、同じクラスをオートロードするために使用すべきではないことに注意することが重要です。両方の標準を使用することは、一部のレガシーコードがPSR-0標準に従う大規模プロジェクトで有益であり、新しいコードはPSR-4標準に従います。

PSR-4は、オートローディングに対するより柔軟なアプローチを提供することにより、PSR-0を改善します。開発者は、名前空間の一部を任意のディレクトリにマッピングできるようになり、ディープディレクトリネストの必要性が減ります。これにより、プロジェクトのディレクトリ構造の管理とナビゲートが容易になります。古いPHPバージョンでPSR-4を使用できますか?

PSR-4にはPHP 5.3以降が必要です。 PHPの古いバージョンを使用している場合、PSR-4を使用するためにアップグレードする必要があります。 PHPは進化し続ける可能性が高く、言語とその生態系が進化するにつれて新しい基準と実践が導入されています。ただし、近い将来、PSR-4はPHPでの自動装置の推奨基準です。

以上が自動車局の戦い:PSR-0対PSR-4の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?May 03, 2025 am 12:21 AM

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

セッションがサーバーで機能していない場合、どのような措置を講じますか?セッションがサーバーで機能していない場合、どのような措置を講じますか?May 03, 2025 am 12:19 AM

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()関数の重要性は何ですか?session_start()関数の重要性は何ですか?May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

セッションクッキーにHTTPonlyフラグを設定することの重要性は何ですか?セッションクッキーにHTTPonlyフラグを設定することの重要性は何ですか?May 03, 2025 am 12:10 AM

HTTPonlyフラグを設定することは、XSS攻撃を効果的に防止し、ユーザーセッション情報を保護することができるため、セッションCookieにとって重要です。具体的には、1)HTTPONLYフラグは、JavaScriptがCookieにアクセスするのを防ぎます。2)Flagは、PHPとFlaskのSetCookiesとMake_Responseを介して設定できます。

PHPセッションはWeb開発でどのような問題を解決しますか?PHPセッションはWeb開発でどのような問題を解決しますか?May 03, 2025 am 12:02 AM

phpsessionssolvetheprobrof of maintainsea crossmultiplehttprequestsbyStoringdataontaonsociatingitiTauniquesessionid.1)それらは、通常はヨーロッパの側面、および一般的には、測定されている

どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境