Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion über PHP-Komponenten, Frameworks und Composer

Eine kurze Diskussion über PHP-Komponenten, Frameworks und Composer

little bottle
little bottlenach vorne
2019-04-23 09:18:383563Durchsuche

Dieser Artikel stellt hauptsächlich PHP-Komponenten, Frameworks und Composer vor. Er hat einen gewissen Lernwert und interessierte Freunde können mehr darüber erfahren.

Was ist eine Komponente?

Eine Komponente ist eine Reihe gepackter Codes, eine Reihe verwandter Klassen, Schnittstellen und Merkmale, die uns bei der Lösung eines bestimmten Problems in PHP-Anwendungen helfen. Wenn Ihre PHP-Anwendung beispielsweise HTTP-Anfragen senden und empfangen muss, kann dies mithilfe vorgefertigter Komponenten wie guzzle/guzzle implementiert werden. Wir verwenden Komponenten nicht, um bereits implementierte Funktionen erneut zu implementieren, sondern um mehr Zeit für die Erreichung der langfristigen Ziele des Projekts aufzuwenden.

Ausgezeichnete PHP-Komponenten weisen die folgenden Eigenschaften auf:

  • Einzelne Funktion: Konzentrieren Sie sich auf die Lösung eines Problems und verwenden Sie einfache Schnittstellen, um Funktionen zu kapseln
  • Klein: klein und exquisit , enthält nur den minimalen Code, der zur Lösung eines Problems erforderlich ist
  • Kooperation: PHP-Komponenten können gut miteinander zusammenarbeiten und werden zur Umsetzung großer Projekte kombiniert
  • Gute Tests: Es bietet Tests selbst und Es gibt genügend Testabdeckung
  • Vollständige Dokumentation: Es sollte eine vollständige Dokumentation bereitgestellt werden, damit Entwickler sie einfach installieren, verstehen und verwenden können

Komponenten vs. Frameworks

Wenn wir wählen Ein Framework. Es erfordert viel, in die Tools dieses Frameworks zu investieren. Das Framework bietet normalerweise viele Tools, aber wenn es kein Tool bereitstellt, das wir benötigen, wird der Schmerz auf uns übertragen, und wir müssen es finden Integrieren Sie eine benutzerdefinierte PHP-Bibliothek. Die Integration von Drittanbietercode in ein Framework kann schwierig sein, da der Drittanbietercode und das Framework möglicherweise nicht dieselben Schnittstellen verwenden.

Bei der Auswahl eines Frameworks konzentrieren wir uns auf die Zukunft des Frameworks, aber wer kann garantieren, dass ein bestimmtes Framework immer das beste Werkzeug für eine bestimmte Aufgabe ist? Große Projekte, die es schon seit vielen Jahren gibt, müssen gut funktionieren und ständig Anpassungen vornehmen. Wenn Sie das falsche PHP-Framework wählen, ist dies möglicherweise nicht möglich. Ältere PHP-Frameworks können aufgrund fehlender Community-Unterstützung langsam oder veraltet sein. Diese älteren Frameworks werden häufig mit prozeduralem Code anstelle von modernem objektorientiertem Code und einigen der neuen Funktionen von PHP geschrieben. Kurz gesagt, bei der Entscheidung, ob PHP verwendet werden soll Rahmen, Es gibt viele Dinge zu beachten.

Glücklicherweise hat Laravel in Bezug auf diese Bedenken gut abgeschnitten, sodass es sich von vielen PHP-Frameworks abheben kann. In gewisser Weise ist Laravel auch ein komponentenbasiertes Entwicklungsframework (die Kernkomponente ist seine eigene Illuminate-Bibliothek). (Die Funktionsimplementierung basiert stark auf Komponenten von Drittanbietern.) Im Vergleich zu Symfony ist der Einstieg einfacher und bietet daher sowohl Skalierbarkeit als auch Benutzerfreundlichkeit. Allerdings weist Laravel auch einige Mängel auf. Beispielsweise können die eigenen Komponenten von Laravel nicht einfach entkoppelt und außerhalb des Laravel-Frameworks verwendet werden (aber ich glaube, dass sich diese Situation verbessern wird, da beispielsweise die Datenbank- und Warteschlangenkomponenten entkoppelt werden können). Zusammengenommen ist Laravel immer noch ein hervorragendes Framework, das uns helfen kann, schnell leistungsstarke Anwendungen zu erstellen.

Sollten wir also Komponenten oder Frameworks verwenden? Die Antwort lautet: Verwenden Sie das richtige Tool für die richtige Sache. Wenn Sie mit einigen PHP-Komponenten schnell kleine Projekte implementieren können, können Sie von den vereinbarten Richtlinien und Strukturen profitieren Verwenden Sie dann ein Framework (wenn Sie sich nicht sicher sind, welches Framework Sie verwenden sollen, dann entscheiden Sie sich für Laravel. Die Verwendung eines Frameworks kann die Entwicklung des Projekts steuern und beschleunigen.)

Komponenten verwenden

Packagist

Wir suchen nach PHP-Komponenten in Packagist. Auf dieser Website werden PHP-Komponenten gesammelt.

Eine kurze Diskussion über PHP-Komponenten, Frameworks und Composer

Wenn wir beispielsweise eine http-Komponente zum Senden und Empfangen von HTTP-Nachrichten verwenden möchten, suchen Sie im Suchfeld nach http. Das erste Ergebnis, das wir erhalten, ist Guzzle. also benutze es.

Composer

Packagist ist eine Community zum Finden von PHP-Komponenten und Composer ist ein Tool zum Installieren von PHP-Komponenten. Composer ist ein Abhängigkeitsmanager für PHP. Er wird auf der Befehlszeile ausgeführt. Sie teilen Composer mit, welche Komponenten Sie benötigen, und Composer lädt diese Komponenten automatisch herunter.

Composer und Packagist arbeiten eng zusammen. Wenn Sie Composer mitteilen, dass Sie die guzzlehttp/guzzle-Komponente verwenden möchten, erhält Composer die guzzlehttp/guzzle-Komponente von Packagist. Suchen Sie die Warehouse-Adresse dieser Komponente und bestimmen Sie, welche Version zu verwenden und auch die Abhängigkeiten dieser Komponente herauszufinden, und laden Sie dann die guzzlehttp/guzzle-Komponente und ihre Abhängigkeiten in Ihr Projekt herunter.

Darüber hinaus generiert Composer automatisch Autoloader, die den PSR-Standards für alle PHP-Komponenten im Projekt entsprechen, wodurch das Abhängigkeitsmanagement und das automatische Laden effektiv abstrahiert werden. Daher ist Composer für die PHP-Community am wichtigsten. Es gibt keine solchen Es ist nicht übertrieben, an die schmerzhaften Tage zu denken, als wir include, require und spl_autoload_register verwenden mussten, um das automatische Laden manuell zu implementieren.

Bezüglich der Installation und Verwendung von Composer werde ich hier nicht näher darauf eingehen. Bitte beziehen Sie sich auf die chinesische Website von Composer.

Beispielprojekt

Nachfolgend verwenden wir ein Beispielprojekt, um zu demonstrieren, wie man Composer und Komponenten zum Entwickeln einer PHP-Anwendung verwendet. Die Funktion dieser Anwendung besteht darin, die URL in einer CSV-Datei zu scannen, um tote Links zu finden. Die Anwendung sendet an jede URL eine HTTP-Anfrage. Wenn der zurückgegebene HTTP-Statuscode größer oder gleich 400 ist, wird der tote Link an die Standardausgabe gesendet. Dies ist eine Befehlszeilenanwendung. Nach der Entwicklung führen wir dieses Skript aus, übergeben den Pfad der CSV-Datei und zeigen die Liste der toten Links in der Standardausgabe an.

Komponenten installieren

Bevor wir beginnen, werfen wir einen Blick darauf, welche Aufgaben mit vorhandenen PHP-Komponenten gelöst werden können: Wir benötigen eine Komponente, die die Daten der CSV-Datei iterativ verarbeiten kann, und außerdem Fügen Sie der CSV-Datei Daten hinzu. Jede URL sendet eine HTTP-Anfrage. Daher benötigen Sie auch eine Komponente, die HTTP-Anfragen senden und die HTTP-Antwort überprüfen kann.

Nachdem wir Packagist durchsucht hatten, fanden wir zwei Komponenten: guzzlehttp/guzzle und league/csv. Erstere wird zum Verarbeiten von HTTP-Nachrichten und letztere zum Verarbeiten von CSV-Daten verwendet. Als nächstes führen wir den folgenden Befehl auf der obersten Ebene des Projekts aus:

composer require guzzlehttp/guzzle
composer require league/csv

Composer installiert die Abhängigkeiten im vendor-Verzeichnis des Stammverzeichnisses. Nachdem die Installation abgeschlossen ist, composer.json und composer.lock Dateien werden im Stammverzeichnis generiert:

Eine kurze Diskussion über PHP-Komponenten, Frameworks und Composer

composer.lockDie Datei listet alle vom Projekt verwendeten PHP-Komponenten sowie die spezifischen Versionsnummern auf Die Komponenten werden dadurch tatsächlich gesperrt, sodass nur bestimmte Versionen von PHP-Komponenten verwendet werden können. Dies hat den Vorteil, dass Composer die in dieser Datei aufgeführte spezifische Version herunterlädt, unabhängig von der neuesten in Packagist verfügbaren Version. Sie sollten die composer.lock-Datei der Versionskontrolle unterziehen, damit die Teammitglieder dieselbe PHP-Version verwenden wie Sie. Wenn die PHP-Komponentenversionen, die von der lokalen Entwicklung und dem Server verwendet werden, identisch sind, können Fehler, die durch unterschiedliche Komponentenversionen verursacht werden, minimiert werden.

Wenn Sie wirklich die neueste Version der Komponente herunterladen und aktualisieren möchten composer.lock, können Sie den Befehl composer update verwenden.

Autoloading

Als nächstes schreiben wir den Anwendungscode, erstellen eine scan.php-Datei im Stammverzeichnis und verwenden dann require oben in der Datei, um den von Composer erstellten Autoloader zu importieren :

require 'vendor/autoload.php';

Der von Composer erstellte Autoloader ist eigentlich eine Datei mit dem Namen autoload.php, die im Verzeichnis vendor gespeichert ist. Wenn Composer jede PHP-Komponente herunterlädt, überprüft er die Datei composer.json jeder Komponente . Bestimmen Sie, wie die Komponente geladen werden soll. Nachdem Sie diese Informationen erhalten haben, erstellt Composer einen lokalen Autoloader für die Komponente, der dem PSR-Standard entspricht. Auf diese Weise können wir jede PHP-Komponente im Projekt instanziieren und diese Komponenten werden bei Bedarf automatisch geladen.

Code schreiben

Nachfolgend verwenden wir formell Guzzle- und CSV-Komponenten, um scan.php-Code zu schreiben:

//使用composer自动加载器
require 'vendor/autoload.php';

//实例Guzzle Http客户端
$client = new GuzzleHttp\Client();

//打开并迭代处理CSV
$csv = League\Csv\Reader::createFromPath($argv[1]);
foreach ($csv as $csvRow) {
    try {
        //发送HTTP GET请求
        $httpResponse = $client->get($csvRow[0]);

        //检查HTTP响应的状态码
        if($httpResponse->getStatusCode() >= 400) {
            throw new Exception();
        }
    } catch (Exception $e) {
            //把死链发给标准输出
            echo $csvRow[0] . PHP_EOL;
    }
}

Nachfolgend fügen wir einige URLs in urls.csv hinzu, eine pro Zeile. und Mindestens einer ist ein toter Link:

Eine kurze Diskussion über PHP-Komponenten, Frameworks und Composer

Öffnen Sie dann das Terminal und führen Sie das scan.php-Skript aus:

php scan.php urls.csv

Wir haben zwei Parameter übergeben, den Das erste ist der Pfad zur Skriptdatei scan.php und das andere ist der Pfad zur CSV-Datei. Die Ausgabe lautet wie folgt:

Eine kurze Diskussion über PHP-Komponenten, Frameworks und Composer

Zugehöriges Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über PHP-Komponenten, Frameworks und Composer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen