亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ホームページ バックエンド開発 PHPチュートリアル PHPマスター|再利用性を向上させるために、PSR-3でロギングします

PHPマスター|再利用性を向上させるために、PSR-3でロギングします

Feb 24, 2025 am 10:42 AM

PHP Master | Logging with PSR-3 to Improve Reusability

コアポイント

    一般的なログオブジェクトインターフェイスであるPSR-3を使用すると、開発者は特定のログ実裝に依存せずに再利用可能なコードを作成できるため、PHPの異なるログライブラリ間の互換性が向上します。
  • PSR-3インターフェイスは、さまざまな重大度レベルのメッセージを処理する8つの方法と、重大度レベルを受信できる一般的な
  • メソッドを提供します。その設(shè)計(jì)は、ログの実裝の非互換性の問題を解決することです。 log()
  • PSR-3には多くの利點(diǎn)がありますが、一部のログライブラリはネイティブにサポートしていません。ただし、開発者は、アダプターモードを活用し、PSR/Logライブラリで提供される
  • クラスを拡張することにより、PSR-3準(zhǔn)拠のアダプターを作成できます。 AbstractLogger
  • Monolog、Symfony、Moustache.phpを含む多くの主要なPHPプロジェクトがPSR-3のサポートを追加しました。コードの再利用の障壁を減らすため、より多くのライブラリとフレームワークがログを正しく使用し、開発者に有用な情報(bào)を提供することが期待されます。
  • PHP開発では、ロギングは最も一般的なタスクの1つです。ログを使用して、エラーメッセージを追跡し、重要なイベントを記録し、コードコードの問題をデバッグします。 PHPプロジェクトでは、コードには、これらの操作を処理するライブラリへの呼び出しが記載されている場(chǎng)合があります。殘念ながら、ログライブラリへの呼び出しはコード全體に散らばっているため、コードはライブラリの可用性に依存します。これは明らかに依存関係の反転の原則に反しています。依存関係の注入を使用してオブジェクトがログライブラリにアクセスできるようにしたとしても、ログライブラリ間の違いは、それらを切り替えることが難しくかつ時(shí)間がかかる可能性があり、コードライブラリ全體の主要なリファクタリングが必要です。ログライブラリ間の互換性を向上させるために、PHP-FIGチームは最近、一般的なログオブジェクトインターフェイスであるPSR-3をリリースしました。この記事では、PSR-3が定義されたログインターフェイスで、特定のログの実裝に依存しない再利用可能なコードを作成する方法について説明します。

psr-3クイックスタート

PSR-3がコードをより再利用可能にする方法を理解する前に、PSR-3とは何かを理解する必要があります。すでにPSR-3に精通している場(chǎng)合は、このセクションをスキップできます。仕様のコアは、オブジェクトをログするためのインターフェイスです。このインターフェイスは、異なる重大度レベルのメッセージを処理する8つの方法と、重大度レベルを受け入れる可能性のある一般的な

メソッドを開示します。 PSR-3でサポートされている8つの重大度レベルは、以下で説明するようにRFC 5424に基づいています。
  • emergency - システムは使用できません
  • alert - アクションが必要です
  • critical - 深刻な狀況
  • error - 即座に注意を必要としないが監(jiān)視する必要があるエラー
  • warning - 珍しいまたは望ましくないイベントですが、エラーではありません
  • notice - 通常の重要なイベント
  • info - 興味深いイベント
  • debug - デバッグの詳細(xì)

各ログメソッドは、文字列または__toString()メソッドを備えたオブジェクトでなければならないメッセージを受け入れます。追加のパラメーターは、ログメッセージのコンテキスト情報(bào)を提供できる配列を受け入れます。これらの方法とパラメーターの完全な説明は、PSR-3仕様に記載されています。

psr-3ファイルを取得

PSR -3を使用するために必要なファイルを取得するのは簡(jiǎn)単です - PSR/Log GitHubリポジトリでそれらを見つけることができます。 Composerを使用して、これらのファイルをPackagistから取得することもできます。 PSR/ログファイルを取得するためのcomposer.jsonファイルの例を次に示します:

{
    "require": {
        "psr/log": "dev-master"
    }
}

ロギングのコードの再利用を制限する方法

PHPには、それぞれがデータを収集および記録する獨(dú)自の方法を備えたさまざまなログライブラリがあります。それらにはいくつかの共通點(diǎn)がありますが、各ライブラリには獨(dú)自のロギング方法のセットがあります。これは、ログを切り替えることは困難な場(chǎng)合があり、多くの場(chǎng)合、ロギングが使用されている場(chǎng)所でコードを変更する必要があることがよくあります。これは、コードの再利用とオブジェクト指向の設(shè)計(jì)の確固たる原理に反します。私たちが直面している狀況は、特定のログライブラリの依存関係を宣言するか、完全に記録することを避けることです。この問題をより明確に説明するには、特定の例が必要です。メールの送信を処理するシンプルなメーラーオブジェクトを作成しているとします。メールを送信するたびにメーラーにメッセージを記録してもらいたいので、優(yōu)れたモノログライブラリを使用してロギングのニーズを処理することにしました。

<?php namespace Email;

class Mailer
{
    private $logger;

    public function __construct($logger)
    {
        $this->logger = $logger;
    }

    public function sendEmail($emailAddress)
    {
        // 發(fā)送電子郵件的代碼...

        // 記錄消息
        $this->logger->addInfo("Email sent to $emailAddress");
    }
}

次のコードでこのクラスを使用できます。

このコードを?qū)g行すると、送信された電子メールが録音され、
<?php
// 創(chuàng)建一個(gè)Monolog對(duì)象
$logger = new Monolog\Logger("Mail");
$logger->pushHandler(new Monolog\Handler\StreamHandler("mail.log"));

// 創(chuàng)建郵件發(fā)送器并發(fā)送電子郵件
$mailer = new Email\Mailer($logger);
$mailer->sendEmail("email@example.com");
ファイルに新しいエントリが作成されます。この時(shí)點(diǎn)で、再利用可能なメーラーオブジェクトを書いたと思うかもしれません。依存関係の注入を使用して、メーラーでロガーを利用できるようにするため、メーラーコードに觸れずに異なるロガー構(gòu)成を交換できます。確かな原則に成功し、ハード依存関係の作成を避けたようです。ただし、アナログを使用してロギングインタラクションを処理するために、さまざまなプロジェクトでメーラークラスを再利用したいとします。アナログには

メソッドがないため、問題があります。アナログを使用して情報(bào)レベルのメッセージを記録するには、mail.logを呼び出します。以下に示すように、メーラークラスを変更してアナログメソッドを使用できます。 addInfo() Analog::log($message, Analog::INFO)

次のコードで更新されたメーラークラスを使用できます。
{
    "require": {
        "psr/log": "dev-master"
    }
}

これは機(jī)能しますが、理想とはほど遠(yuǎn)いものです。特定のロギングの実裝に対するメーラーの依存に遭遇しました。これには、新しいロガーを?qū)毪工毪趣衰楗工驂涓工氡匾ⅳ辘蓼埂¥长欷摔瑜?、クラスの再利用性が低下し、特定のロガーの可用性に依存するか、クラスのログを完全に放棄するかどうかを選択する必要があります。

PSR-3を使用して、ロガーの依存関係を避けます

アレハンドロ?ゲルヴァシオがトピックに関する彼の優(yōu)れた記事で説明しているように、依存関係の反転の原則は、具體的な実裝ではなく抽象化に依存するべきだと言っています。ロギングの場(chǎng)合、私たちの現(xiàn)在の問題は、依存できる適切な抽象化の欠如です。これは、PSR-3が登場(chǎng)する場(chǎng)所です。 PSR-3は、ロガーに共通のインターフェイスを提供することにより、ロギング実裝の非互換性を克服するように設(shè)計(jì)されています(適切に指名されたLoggerInterface)。特定の実裝に縛られていないインターフェイスを提供することにより、PSR-3を使用すると、特定のロガーに依存することを避けることができます。代わりに、LoggerInterface

<?php namespace Email;

class Mailer
{
    private $logger;

    public function __construct($logger)
    {
        $this->logger = $logger;
    }

    public function sendEmail($emailAddress)
    {
        // 發(fā)送電子郵件的代碼...

        // 記錄消息
        $this->logger->addInfo("Email sent to $emailAddress");
    }
}
コンストラクターは

実裝者を受け入れるように変更されており、LoggerInterfaceメソッドを呼び出すsendEmail()メソッドが呼び出されました。 MonologはすでにPSR-3に準(zhǔn)拠しており、アナログはinfo()を?qū)g裝するラッパーオブジェクトを提供するため、メーラークラスを変更せずにこれら2つのロガーを使用できるようになりました。モノログを使用してこのクラスを呼び出す方法は次のとおりです。 LoggerInterface

and Analog:
<?php
// 創(chuàng)建一個(gè)Monolog對(duì)象
$logger = new Monolog\Logger("Mail");
$logger->pushHandler(new Monolog\Handler\StreamHandler("mail.log"));

// 創(chuàng)建郵件發(fā)送器并發(fā)送電子郵件
$mailer = new Email\Mailer($logger);
$mailer->sendEmail("email@example.com");
を使用します

メーラークラスを編集したり、使用方法を変更せずに、ライブラリでメーラーオブジェクトを使用することができます。
<?php namespace Email;

class Mailer
{
    public function sendEmail($emailAddress)
    {
        // 發(fā)送電子郵件的代碼...

        // 記錄消息
        Analog::log("Email sent to $emailAddress", Analog::INFO);
    }
}

PSR-3 <

これまでのところ、を要求する実裝者を介して、特定のロギングの実裝からメーラーオブジェクトを正常に分離しました。しかし、PSR-3サポートのためにまだ追加されていないロガーについてはどうでしょうか?たとえば、人気のあるKloggerライブラリはしばらく更新されておらず、現(xiàn)在PSR-3と互換性がありません。幸いなことに、アダプターパターンを活用することにより、Kloggerによって公開されたメソッドをで定義されたメソッドに簡(jiǎn)単にマッピングできます。 PSR/Logリポジトリでサポートされているファイルを使用すると、拡張できる

クラスを提供することにより、アダプタークラスを簡(jiǎn)単に作成できます。抽象クラスは、

で定義された8つのレベル固有のログメソッドを一般的なLoggerInterfaceメソッドに転送するだけです。 LoggerInterfaceクラスを拡張し、獨(dú)自のAbstractLoggerメソッドを定義することにより、PSR-3をネイティブにサポートしていないロガー用のPSR-3準(zhǔn)拠のアダプターを簡(jiǎn)単に作成できます。 Klogger用のシンプルなアダプターを作成して、これを以下に示します:LoggerInterface

{
    "require": {
        "psr/log": "dev-master"
    }
}

log()メソッドは、単にLoggerInterfaceメソッドをそれぞれのKloggerメソッドにマップするだけで、Kloggerは実際のロギングアクティビティを処理します。この方法でKloggerクラスをラッピングすることにより、LoggerInterface契約を破らずに使用できます。これで、メーラークラスでKloggerアダプターを使用できます。

<?php namespace Email;

class Mailer
{
    private $logger;

    public function __construct($logger)
    {
        $this->logger = $logger;
    }

    public function sendEmail($emailAddress)
    {
        // 發(fā)送電子郵件的代碼...

        // 記錄消息
        $this->logger->addInfo("Email sent to $emailAddress");
    }
}
Adapterクラスを使用すると、メーラークラスを変更せずにKloggerを使用しても、

に付著することができます。 Kloggerはデバッグレベルメッセージの2番目のパラメーターを受け入れないため、アダプターを使用してもPSR-3に完全に準(zhǔn)拠していません。 Kloggerを拡張してPSR-3と完全に互換性のあるものにすることは些細(xì)な作業(yè)ですが、それはこの記事の範(fàn)囲を超えています。ただし、アダプタークラスを使用すると、完全にPSR-3に準(zhǔn)拠することに非常に近づき、KloggerクラスでLoggerInterfaceを使用できるようになると言っても安全です。 LoggerInterface

結(jié)論 この記事では、PSR-3を使用して、特定のロギングの実裝に依存しないロガーフリーコードを作成するのに役立つ方法を?qū)Wびました。多くの主要なPHPプロジェクトが、Monolog、Symfony、Moustache.phpを含むPSR-3のサポートを追加しており、Drupalのような他の有名なプロジェクトでは、それを最適に統(tǒng)合する方法について議論しています。 PSR-3はコードの再利用の障壁を減らすため、より多くのライブラリとフレームワークがロギングを使用して、開発者に有用な情報(bào)を提供する必要があります。 PSR-3は、アプリケーションでのロギングの使用方法に影響しますか?以下のコメントセクションでお知らせください。

(フォトリアからの寫真)

(スペースの制限のため、PSR-3ロギングのFAQ部分はここで省略されています。必要に応じて追加できます。

以上がPHPマスター|再利用性を向上させるために、PSR-3でロギングしますの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中國(guó)語版

SublimeText3 中國(guó)語版

中國(guó)語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

パスワード強(qiáng)度のPHP Regex パスワード強(qiáng)度のPHP Regex Jul 03, 2025 am 10:33 AM

パスワードの強(qiáng)度を判斷するには、定期的な処理と論理処理を組み合わせる必要があります?;镜膜室摔弦韵陇蓼欷蓼埂?。長(zhǎng)さは8桁以上です。 2。少なくとも小文字、大文字、および數(shù)字を含む。 3。特別な文字制限を追加できます。高度な側(cè)面に関しては、文字の継続的な重複と漸進(jìn)的/減少シーケンスを避ける必要があります。これには、PHP機(jī)能検出が必要です。同時(shí)に、ブラックリストを?qū)毪筏?、パスワードや123456などの一般的な弱いパスワードをフィルタリングする必要があります。最後に、評(píng)価の精度を向上させるためにZXCVBNライブラリを組み合わせることをお?jiǎng)幛幛筏蓼埂?/p>

PHP変數(shù)スコープは説明されています PHP変數(shù)スコープは説明されています Jul 17, 2025 am 04:16 AM

PHP変數(shù)スコープの一般的な問題とソリューションには次のものが含まれます。1。グローバル変數(shù)は関數(shù)內(nèi)でアクセスできず、グローバルキーワードまたはパラメーターを使用して渡す必要があります。 2。靜的変數(shù)は靜的で宣言され、1回のみ初期化され、値は複數(shù)の呼び出し間で維持されます。 3. $ _GETや$ _POSTなどのハイパーグローバル変數(shù)は、任意の範(fàn)囲で直接使用できますが、安全なフィルタリングに注意を払う必要があります。 4.匿名関數(shù)は、使用キーワードを使用して親スコープ変數(shù)を?qū)毪工氡匾ⅳ?、外部変?shù)を変更する場(chǎng)合は、參照を渡す必要があります。これらのルールを習(xí)得すると、エラーを回避し、コードの安定性が向上するのに役立ちます。

ファイルアップロードをPHPで安全に処理する方法は? ファイルアップロードをPHPで安全に処理する方法は? Jul 08, 2025 am 02:37 AM

PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認(rèn)し、ファイル名とパスを制御し、サーバー制限を設(shè)定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認(rèn)し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機(jī)能を決定します。 3。PHP構(gòu)成は、アップロードサイズを制限し、一時(shí)的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

PHPでコードをコメントします PHPでコードをコメントします Jul 18, 2025 am 04:57 AM

PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお?jiǎng)幛幛筏蓼埂?2。使用/.../複數(shù)の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時(shí)にネストを避ける必要があります。

発電機(jī)はPHPでどのように機(jī)能しますか? 発電機(jī)はPHPでどのように機(jī)能しますか? Jul 11, 2025 am 03:12 AM

ageneratorinphpisamemory-efficientwaytoateate-overdeatatasetasetasetasetsinging valueseintimeintimeturningthemallatonce.1.generatorsususedeywordproducevaluesedemand、memoryusage.2を還元すること。2

PHPコメントを書くためのヒント PHPコメントを書くためのヒント Jul 18, 2025 am 04:51 AM

PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長(zhǎng)性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統(tǒng)合形式を使用します。 2。JSジャンプを手動(dòng)で出力する必要がある理由など、ロジックの背後にある理由を強(qiáng)調(diào)します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全體的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進(jìn)します。優(yōu)れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

クイックPHPインストールチュートリアル クイックPHPインストールチュートリアル Jul 18, 2025 am 04:52 AM

to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

PHPの學(xué)習(xí):初心者向けガイド PHPの學(xué)習(xí):初心者向けガイド Jul 18, 2025 am 04:54 AM

tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech

See all articles