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

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

Feb 23, 2025 am 08:45 AM

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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO) PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO) Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHP:データベースとサーバー側のロジックの処理 PHP:データベースとサーバー側のロジックの処理 Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPの目的:動的なWebサイトの構築 PHPの目的:動的なWebサイトの構築 Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

See all articles