ホームページ >バックエンド開発 >PHPチュートリアル >ベスト プラクティス シリーズ (1) -- PHP コンポーネント、フレームワーク、および Composer についての話
コンポーネントは、問題を解決するために使用される一連のパッケージ化されたコードです。 PHP アプリケーション特有の問題についての質問です。たとえば、PHP アプリケーションで HTTP リクエストを送受信する必要がある場合、guzzle/guzzle などの既製のコンポーネントを使用して実装できます。私たちは、すでに実装されている機能を再実装するためにコンポーネントを使用するのではなく、プロジェクトの長期目標を達成するためにより多くの時間を費やすために使用します。
優れた PHP コンポーネントには次の特徴があります。
私たちはフレームワークを選択します 現時点では、このフレームワークのツールに多額の投資をする必要があります。通常、フレームワークは多数のツールを提供しますが、必要なツールが提供されない場合、その痛みは私たちに伝わります。そしてカスタム PHP ライブラリを見つけて統合する必要があります。サードパーティのコードとフレームワークは同じインターフェイスを使用していない可能性があるため、サードパーティのコードをフレームワークに統合するのは困難な場合があります。
フレームワークを選択するとき、私たちはフレームワークの将来に焦点を当てますが、特定のフレームワークが常に特定の仕事に最適なツールであることを誰が保証できますか?長年にわたって存在してきた大規模なプロジェクトは、適切なパフォーマンスを維持し、常に調整を行う必要があります。間違った PHP フレームワークを選択すると、それができない可能性があります。古い PHP フレームワークは、コミュニティのサポートが不足しているため、遅くなったり時代遅れになったりすることがあります。これらの古いフレームワークは、多くの場合、PHP を使用するかどうかを決定する際に、最新のオブジェクト指向コードや PHP の新機能の代わりに手続き型コードを使用して作成されます。フレームワーク、考慮すべきことがたくさんあります。
幸いなことに、Laravel はこれらの懸念に関して良好なパフォーマンスを示しており、ある意味、Laravel はコンポーネントベースの開発フレームワークでもあります (コアコンポーネントは独自の Illuminate ライブラリです)。 、関数の実装はサードパーティのコンポーネントに大きく依存しています)、Symfony と比較して簡単に始められるため、拡張性と使いやすさを兼ね備えています。ただし、Laravel にはいくつかの欠点もあります。たとえば、Laravel 独自のコンポーネントを簡単に分離して Laravel フレームワークの外で使用することはできません (ただし、この状況は改善されると信じています。たとえば、データベース コンポーネントやキュー コンポーネントを分離できるなど)。総合すると、Laravel は依然として、強力なアプリケーションを迅速に作成するのに役立つ優れたフレームワークです。
では、コンポーネントまたはフレームワークを使用する必要がありますか?答えは、適切なツールを適切に使用することです。いくつかの PHP コンポーネントを使用して小規模なプロジェクトを迅速に実装できる場合、複数のチーム メンバーが大規模なプロジェクトに取り組んでいる場合は、PHP によって提供される合意されたガイドラインと構造の恩恵を受けることができます。フレームワークを選択してから、フレームワークを使用します (どのフレームワークを使用するか迷った場合は、Laravel を選択してください。フレームワークを使用すると、プロジェクトの開発が促進され、加速されます)。
追伸: この文は言語紛争にも当てはまります。正しいことを行うには正しい言語を使用してください。これは言語紛争に対するアカデミーマスターの態度と立場です。
この Web サイトは、PHP コンポーネントを収集するために使用されます。見つけることができます。
たとえば、http コンポーネントを使用して HTTP メッセージを送受信したい場合は、検索ボックスで http を検索すると、最初に得られる結果が Guzzle なので、それを使用します。 。
Packagist は PHP コンポーネントを見つけるためのコミュニティであり、Composer は PHP コンポーネントをインストールするためのツールです。 Composer は PHP の依存関係マネージャーです。必要なコンポーネントを Composer に指示すると、Composer はこれらのコンポーネントをダウンロードしてプロジェクトに自動的にロードします。
Composer と Packagist は緊密に連携し、guzzlehttp/guzzle コンポーネントを使用するように Composer に指示すると、Composer は Packagist から guzzlehttp/guzzle コンポーネントを取得し、このコンポーネントのウェアハウス アドレスを見つけて、どのバージョンであるかを判断します。このコンポーネントの依存関係を調べて、guzzlehttp/guzzle コンポーネントとその依存関係をプロジェクトにダウンロードします。
さらに、Composer はプロジェクト内のすべての PHP コンポーネントの PSR 標準に準拠するオートローダーを自動的に生成し、依存関係の管理と自動読み込みを効果的に抽象化します。そのため、Composer は PHP コミュニティにとって最も重要です。追加ツールなど、自動読み込みを手動で実装するために include、require、spl_autoload_register を使用しなければならなかった苦痛な日々を思い出すと、過言ではありません。
Composer のインストールと使用方法については、ここでは詳しく説明しません。Composer の中国語 Web サイトを参照してください。
以下では、サンプル プロジェクトを使用して、Composer とコンポーネントを使用して PHP アプリケーションを開発する方法を示します。このアプリケーションの機能は、CSV ファイル内の URL をスキャンしてデッドを見つけることです。アプリケーションは各 URL に HTTP リクエストを送信します。返された HTTP ステータス コードが 400 以上の場合、デッド リンクは標準出力に送信されます。これはコマンド ライン アプリケーションです。開発後、このスクリプトを実行し、csv ファイルのパスを渡し、デッド リンクのリストを標準出力に表示します。
始める前に、既存の PHP コンポーネントを使用してどのタスクを解決できるかを見てみましょう。csv ファイルのデータを反復処理できるコンポーネントが必要です。各 URL は HTTP リクエストを送信するため、HTTP リクエストを送信して HTTP レスポンスを確認できるコンポーネントも必要です。
Packagist を参照すると、guzzlehttp/guzzle と League/csv という 2 つのコンポーネントが見つかりました。前者は HTTP メッセージの処理に使用され、後者は CSV データの処理に使用されます。次に、プロジェクトの最上位で次のコマンドを実行します。
composer require guzzlehttp/guzzlecomposer require league/csv
インストールが完了すると、Composer は依存関係をルート ディレクトリのベンダー ディレクトリにインストールします。ファイルはルート ディレクトリに生成されます。
このファイルには、プロジェクトで使用されるすべての PHP コンポーネントと、コンポーネントの特定のバージョン番号がリストされます。プロジェクトでは、特定のバージョンの PHP コンポーネントのみを使用できます。この利点は、Packagist で利用可能な最新バージョンに関係なく、composer がこのファイルにリストされている特定のバージョンをダウンロードすることです。チーム メンバーが同じ PHP バージョンを使用できるように、composer.lock ファイルをバージョン管理に置く必要があります。 , ローカル開発とサーバーで使用する PHP コンポーネントのバージョンが同じであれば、コンポーネントのバージョンの違いによって発生するバグを最小限に抑えることができます。
コンポーネントの最新バージョンをダウンロードして、composer.lock を更新したい場合は、composer update コマンドを使用できます。
次に、アプリケーション コードを記述し、ルート ディレクトリに scan.php ファイルを作成し、ファイルの先頭で require を使用して、 Composer オートローダーによって作成されたものをインポートします。
<?phprequire 'vendor/autoload.php';
Composer によって作成されたオートローダーは、実際には autoload.php という名前のファイルであり、Composer が各 PHP コンポーネントをダウンロードするときに、この情報を取得した後、Composer は PSR 標準に準拠するコンポーネントのオートローダーをローカルに作成します。このようにして、プロジェクト内の任意の PHP コンポーネントをインスタンス化することができ、これらのコンポーネントはオンデマンドで自動的にロードされます。
以下では、正式に Guzzle コンポーネントと CSV コンポーネントを使用して scan.php コードを記述します。
<?php//使用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; }}
以下は URL です。 csv いくつかの URL を 1 行に 1 つずつ追加します。そのうちの少なくとも 1 つはデッドリンクです:
次に、ターミナルを開いて scan.php スクリプトを実行します:
php scan.php urls.csv
2 つのパラメーターを渡しました。1 つはスクリプト ファイル scan.php へのパス、もう 1 つは CSV ファイルへのパスです。出力は次のとおりです。
次のセクションでは、プライベート PHP コンポーネントと、独自の PHP コンポーネントを作成して Packagist にアップロードする方法について説明します。