


Kernpunkte
- PSR-3, eine gemeinsame Schnittstelle für Protokollobjekte, ermöglicht es Entwicklern, wiederverwendbaren Code zu schreiben, ohne sich auf eine bestimmte Protokollimplementierung zu verlassen, wodurch die Kompatibilität zwischen verschiedenen Protokollbibliotheken in PHP verbessert wird. Die Schnittstelle
- psr-3 bietet acht Methoden, um Nachrichten unterschiedlicher Schweregradniveau zu verarbeiten, und eine gemeinsame
log()
-Methode, die alle Schweregradniveaus empfangen kann. Sein Design besteht darin, das Problem der Inkompatibilität der Protokollimplementierung zu lösen. - Obwohl PSR-3 viele Vorteile hat, unterstützen einige Protokollbibliotheken es nicht nativ. Entwickler können jedoch PSR-3-konforme Adapter erstellen, indem sie den Adaptermodus nutzen und die in der PSR-/Protokollbibliothek bereitgestellte
AbstractLogger
-Kläufe erweitern. - Viele wichtige PHP-Projekte, einschließlich Monolog, Symfony und Schnurrbart.php, haben Unterstützung für PSR-3 hinzugefügt. Wenn es die Hindernisse für die Wiederverwendung von Code reduziert, wird erwartet, dass mehr Bibliotheken und Frameworks die korrekte Protokollierung verwenden und nützliche Informationen für Entwickler bereitstellen.
Bei der PHP -Entwicklung ist die Protokollierung eine der häufigsten Aufgaben. Wir verwenden Protokolle, um Fehlermeldungen zu verfolgen, wichtige Ereignisse zu protokollieren und Codeprobleme zu debugieren. In jedem PHP -Projekt kann der Code mit Anrufen an Protokollbibliotheken gefüllt werden, die diese Vorgänge für uns verarbeiten. Leider sind Anrufe bei Protokollbibliotheken im gesamten Code verstreut, wodurch der Code von der Verfügbarkeit der Bibliothek abhängt, was eindeutig dem Prinzip der Abhängigkeitsinversion widerspricht. Auch wenn wir die Abhängigkeitsinjektion verwenden, um unsere Objekte auf die Protokollbibliothek zugreifen zu lassen, kann der Unterschied zwischen Protokollbibliotheken bedeutet, dass das Wechsel zwischen ihnen schwierig und zeitaufwändig sein kann und ein großes Neuaufbau der gesamten Codebibliothek erforderlich ist. Um die Kompatibilität zwischen Protokollbibliotheken zu verbessern, hat das PHP-Fig-Team kürzlich PSR-3 veröffentlicht, eine gemeinsame Schnittstelle für Protokollobjekte. In diesem Artikel werde ich diskutieren, wie die von PSR-3 definierte Protokollschnittstelle es uns ermöglicht, wiederverwendbaren Code zu schreiben, der nicht von einer bestimmten Protokollimplementierung abhängt.
psr-3 schnelles Start
Bevor wir verstehen, wie PSR-3 unseren Code wiederverwendbarer macht, ist es notwendig zu verstehen, was PSR-3 ist. Wenn Sie mit PSR-3 bereits vertraut sind, können Sie diesen Abschnitt überspringen. Der Kern der Spezifikation ist die Schnittstelle zu Protokollobjekten. Diese Schnittstelle gibt acht Möglichkeiten, Meldungen unterschiedlicher Schweregradniveaus und eine gemeinsame Methode zu verarbeiten, die alle Schweregradniveaus akzeptieren kann. Die von PSR-3 unterstützten acht Schweregraden basieren auf RFC 5424, wie nachstehend beschrieben: log()
-
emergency
- Das System kann nicht verwendet werden -
alert
- Aktion ist erforderlich -
critical
- ernsthafte Situation -
error
- Fehler, die keine sofortige Aufmerksamkeit benötigen, aber überwacht werden sollten -
warning
- Ein ungewöhnliches oder unerwünschtes Ereignis, aber kein Fehler -
notice
- normale, aber wichtige Ereignisse -
info
- Interessante Ereignisse -
debug
- Details zum Debuggen
Jede Protokollmethode akzeptiert eine Nachricht, die eine Zeichenfolge oder ein Objekt mit einer __toString()
-Methode sein muss. Zusätzliche Parameter akzeptieren ein Array, mit dem Kontextinformationen für Protokollnachrichten bereitgestellt werden können. Eine vollständige Beschreibung dieser Methoden und Parameter finden Sie in der PSR-3-Spezifikation.
PSR-3-Datei
abrufen Das Erhalten der Dateien, die Sie für die Verwendung von PSR -3 benötigen, ist einfach - Sie können sie im PSR/Protokoll -Github -Repository finden. Sie können auch Komponist verwenden, um diese Dateien von Packagist zu erhalten. Hier ist ein Beispiel für eine composer.json
-Datei zum Abrufen von PSR/Protokolldateien:
{ "require": { "psr/log": "dev-master" } }
So begrenzen Sie die Wiederverwendung der Code -Protokollierung
PHP verfügt über viele verschiedene Protokollbibliotheken, jeweils eine eigene Art, Daten zu sammeln und aufzuzeichnen. Obwohl sie einige Gemeinsamkeiten haben, verfügt jede Bibliothek über ihre einzigartigen Protokollierungsmethoden. Dies bedeutet, dass das Umschalten zwischen Protokollen eine Herausforderung sein kann und häufig den Code ändern muss, wo die Protokollierung verwendet wird. Dies entspricht dem soliden Prinzip der Code-Wiederverwendung und des objektorientierten Designs. Die Situation, mit der wir konfrontiert sind, ist, dass entweder Abhängigkeiten für bestimmte Protokollbibliotheken deklariert werden oder sich insgesamt vermeiden. Um dieses Problem klarer zu veranschaulichen, ist ein bestimmtes Beispiel erforderlich. Angenommen, wir erstellen ein einfaches Mailer -Objekt, um das Senden von E -Mails zu verarbeiten. Wir möchten, dass Mailer jedes Mal, wenn wir eine E -Mail senden, eine Nachricht protokolliert, und wir beschlossen, die hervorragende Monologbibliothek zu verwenden, um unsere Protokollierungsanforderungen zu erfüllen.
<?php namespace Email; class Mailer { private $logger; public function __construct($logger) { $this->logger = $logger; } public function sendEmail($emailAddress) { // 发送电子邮件的代码... // 记录消息 $this->logger->addInfo("Email sent to $emailAddress"); } }
Wir können diese Klasse mit dem folgenden Code verwenden:
<?php // 创建一个Monolog对象 $logger = new Monolog\Logger("Mail"); $logger->pushHandler(new Monolog\Handler\StreamHandler("mail.log")); // 创建邮件发送器并发送电子邮件 $mailer = new Email\Mailer($logger); $mailer->sendEmail("email@example.com");
Ausführen dieses Codes erstellt einen neuen Eintrag in der Datei mail.log
und erfasst die gesendete E -Mail. Zu diesem Zeitpunkt könnten wir denken, dass wir ein wiederverwendbares Mailer -Objekt geschrieben haben. Wir verwenden die Abhängigkeitsinjektion, um den Protokoll für Mailer verfügbar zu machen, damit wir verschiedene Logger -Konfigurationen austauschen können, ohne unseren Mailer -Code zu berühren. Es sieht so aus, als hätten wir dem soliden Prinzip erfolgreich verfolgt und vermieden, harte Abhängigkeiten zu schaffen. Nehmen wir jedoch an, wir möchten die Mailer -Klasse in verschiedenen Projekten wiederverwenden, indem wir analog zur Behandlung von Protokollierungsinteraktionen verwendet werden. Jetzt haben wir ein Problem, weil Analog keine addInfo()
-Methode hat. Um mithilfe von Analog über Nachrichten auf Informationsebene aufzuzeichnen, nennen wir Analog::log($message, Analog::INFO)
. Wir können die Mailerklasse so ändern, dass die analoge Methode wie unten gezeigt verwendet wird.
<?php namespace Email; class Mailer { public function sendEmail($emailAddress) { // 发送电子邮件的代码... // 记录消息 Analog::log("Email sent to $emailAddress", Analog::INFO); } }
Wir können die aktualisierte Mailerklasse mit dem folgenden Code verwenden:
{ "require": { "psr/log": "dev-master" } }
Während dies funktionieren wird, ist es alles andere als ideal. Wir haben die Abhängigkeit von Mailer von einer bestimmten Protokollierungsimplementierung begegnet, bei der die Klasse bei der Einführung eines neuen Loggers geändert werden muss. Dies macht die Klasse weniger wiederverwendbar und zwingt uns, sich zwischen der Verfügbarkeit eines bestimmten Loggers zu entscheiden oder die Protokollierung in der Klasse insgesamt aufzugeben.
Verwenden Sie PSR-3, um Logger-Abhängigkeiten zu vermeiden
Wie Alejandro Gervasio in seinem hervorragenden Artikel zu diesem Thema erklärt, sagt uns das Prinzip der Abhängigkeitsinversion, dass wir uns eher auf Abstraktion als auf konkrete Implementierungen verlassen sollten. Bei der Protokollierung war unser aktuelles Problem das Fehlen einer geeigneten Abstraktion, auf die man sich verlassen kann. Hier kommt PSR-3 ins Spiel. PSR-3 wurde entwickelt, um die Inkompatibilität der Protokollierungsimplementierung zu überwinden, indem eine gemeinsame Schnittstelle für den Logger bereitgestellt wird (ordnungsgemäß als LoggerInterface
). Durch die Bereitstellung einer Schnittstelle, die nicht an eine bestimmte Implementierung gebunden ist, ermöglicht PSR-3 es uns, es zu vermeiden, auf einen bestimmten Protokoll zu stützen. Stattdessen können wir die Eingabeaufforderung für LoggerInterface
eingeben, um einen PSR-3-konformen Logger zu erhalten. Ich habe die folgende Mailerklasse aktualisiert, um dies zu demonstrieren:
<?php namespace Email; class Mailer { private $logger; public function __construct($logger) { $this->logger = $logger; } public function sendEmail($emailAddress) { // 发送电子邮件的代码... // 记录消息 $this->logger->addInfo("Email sent to $emailAddress"); } }Der
-Konstruktor wurde so geändert, dass der LoggerInterface
-implementierer akzeptiert wird, und die sendEmail()
-Methode nennt nun die in PSR-3 angegebene info()
-Methode. Das Monolog ist bereits PSR-3-konform, und Analog bietet ein Wrapper-Objekt, das LoggerInterface
implementiert, sodass wir diese beiden Holzfäller jetzt verwenden können, ohne die Mailer-Klasse zu ändern. Hier erfahren Sie, wie Sie diese Klasse mit Monolog nennen:
<?php // 创建一个Monolog对象 $logger = new Monolog\Logger("Mail"); $logger->pushHandler(new Monolog\Handler\StreamHandler("mail.log")); // 创建邮件发送器并发送电子邮件 $mailer = new Email\Mailer($logger); $mailer->sendEmail("email@example.com");
und analog verwenden:
<?php namespace Email; class Mailer { public function sendEmail($emailAddress) { // 发送电子邮件的代码... // 记录消息 Analog::log("Email sent to $emailAddress", Analog::INFO); } }
Jetzt können wir unser Mailer -Objekt mit einer Bibliothek verwenden, ohne die Mailerklasse zu bearbeiten oder die Art und Weise zu ändern, wie wir sie verwenden.
Verwenden Sie den Adaptermodus für Holzfäller, die PSR-3
nicht unterstützen Bisher haben wir das Mailer -Objekt erfolgreich von einer bestimmten Protokollierungsimplementierung über den Implementierer entkoppelt, der LoggerInterface
beantragt. Aber was ist mit diesen Holzfällern, die für die PSR-3-Unterstützung noch nicht hinzugefügt wurden? Beispielsweise ist die beliebte Klogger-Bibliothek seit einiger Zeit nicht mehr aktualisiert und ist derzeit mit PSR-3 nicht kompatibel. Glücklicherweise können wir die durch Klogger ausgesetzten Methoden leicht auf die in LoggerInterface
definierten Methoden abbilden, indem wir das Adaptermuster nutzen. Unterstützte Dateien im PSR/Protokoll -Repository ermöglichen es uns, Adapterklassen einfach zu erstellen, indem wir eine AbstractLogger
-Klasse bereitstellen, die wir erweitern können. Eine abstrakte Klasse leitet einfach acht Ebenenspezifische Protokollmethoden weiter, die in LoggerInterface
zu einer gemeinsamen log()
-Methode definiert sind. Durch Erweiterung der AbstractLogger
-Klasses und definiere unsere eigene log()
-Methode können wir problemlos PSR-3-konforme Adapter für Holzfäller erstellen, die PSR-3 nicht nativ unterstützen. Ich werde dies unten demonstrieren, indem ich einen einfachen Adapter für Klogger erstelle:
{ "require": { "psr/log": "dev-master" } }Die
log()
-Methode ordnet einfach die LoggerInterface
-Methode der jeweiligen Klogger -Methode ab, und die Klogger übernimmt die tatsächliche Protokollierungsaktivität. Indem wir die Klogger -Klasse auf diese Weise einwickeln, können wir sie verwenden, ohne den LoggerInterface
-Vertrag zu brechen. Wir können jetzt den Klogger -Adapter mit der Mailerklasse verwenden:
<?php namespace Email; class Mailer { private $logger; public function __construct($logger) { $this->logger = $logger; } public function sendEmail($emailAddress) { // 发送电子邮件的代码... // 记录消息 $this->logger->addInfo("Email sent to $emailAddress"); } }
Mit der Adapterklasse können wir Klogger verwenden, ohne die Mailerklasse zu ändern, und halten uns dennoch an LoggerInterface
. Klogger akzeptiert nicht den zweiten Parameter für Debug-Level-Nachrichten, daher entspricht es PSR-3 auch bei einem Adapter nicht vollständig. Klogger zu erweitern, um es vollständig mit PSR-3 kompatibel zu machen, wäre eine triviale Aufgabe, aber das liegt außerhalb des Rahmens dieses Artikels. Man kann jedoch mit Sicherheit sagen, dass die Verwendung unserer Adapterklasse uns sehr nahe daran ist, vollständig PSR-3-konform zu sein und es uns ermöglicht, LoggerInterface
mit der Klogger-Klasse zu verwenden.
Schlussfolgerung
In diesem Artikel haben wir gelernt, wie man PSR-3 verwendet, um uns zu helfen, loggerfreien Code zu schreiben, der nicht von einer bestimmten Protokollierungsimplementierung abhängt. Viele wichtige PHP-Projekte haben die Unterstützung für PSR-3, darunter Monolog, Symfony und Schnurrbart, sowie andere bekannte Projekte wie Drupal unterstützt, wie man sie am besten integriert. Da PSR-3 die Hindernisse für die Wiederverwendung von Code verringert, sollten wir mehr Bibliotheken und Frameworks korrekt anhand der Protokollierung sehen, um nützliche Informationen für Entwickler bereitzustellen. Wirkt sich PSR-3 aus, wie Sie die Protokollierung in Ihrer Anwendung verwenden? Bitte teilen Sie uns im Kommentarbereich unten mit.
(Bild aus Fotolien)
(Der FAQ-Teil der PSR-3-Protokollierung wird hier aufgrund von Platzbeschränkungen weggelassen. Es kann bei Bedarf hinzugefügt werden.)
Das obige ist der detaillierte Inhalt vonPHP Master | Anmelden mit PSR-3, um die Wiederverwendbarkeit zu verbessern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Was noch beliebt ist, ist die Benutzerfreundlichkeit, die Flexibilität und ein starkes Ökosystem. 1) Benutzerfreundliche und einfache Syntax machen es zur ersten Wahl für Anfänger. 2) eng integriert in die Webentwicklung, eine hervorragende Interaktion mit HTTP -Anforderungen und Datenbank. 3) Das riesige Ökosystem bietet eine Fülle von Werkzeugen und Bibliotheken. 4) Active Community und Open Source Nature passen sie an neue Bedürfnisse und Technologietrends an.

PHP und Python sind beide Programmiersprachen auf hoher Ebene, die häufig für die Aufgaben der Webentwicklung, Datenverarbeitung und Automatisierung verwendet werden. 1.PHP wird häufig verwendet, um dynamische Websites und Content -Management -Systeme zu erstellen, während Python häufig zum Erstellen von Webrahmen und Datenwissenschaften verwendet wird. 2.PHP verwendet Echo, um Inhalte auszugeben, Python verwendet Print. 3. Beide unterstützen die objektorientierte Programmierung, aber die Syntax und die Schlüsselwörter sind unterschiedlich. 4. PHP unterstützt eine schwache Konvertierung, während Python strenger ist. 5. Die PHP -Leistungsoptimierung umfasst die Verwendung von Opcache und asynchrone Programmierung, während Python Cprofile und asynchrone Programmierungen verwendet.

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP bleibt im Modernisierungsprozess wichtig, da es eine große Anzahl von Websites und Anwendungen unterstützt und sich den Entwicklungsbedürfnissen durch Frameworks anpasst. 1.PHP7 verbessert die Leistung und führt neue Funktionen ein. 2. Moderne Frameworks wie Laravel, Symfony und Codesigniter vereinfachen die Entwicklung und verbessern die Codequalität. 3.. Leistungsoptimierung und Best Practices verbessern die Anwendungseffizienz weiter.

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.