ホームページ  >  記事  >  バックエンド開発  >  PHPルーティングの実装原理についてアドバイスをお願いします

PHPルーティングの実装原理についてアドバイスをお願いします

WBOY
WBOYオリジナル
2016-12-01 00:56:231732ブラウズ

しばらくフレームワークを使用した後、MVC フレームワークの中心はルーティングであることに気づきました。たとえば、TP5 ルーティングは非常に強力ですが、ソース コードには基本的な機能があります。コメントはありません。2時間読んでも、まだ全体がわかりません。

今私にできることは、その後のさまざまなルール ルーティングと通常のルーティングを理解できないことです。実装プロセス、具体的なデモ、チュートリアル、または関連する書籍を教えていただければ幸いです。 O(∩_∩)O ありがとうございます!

返信内容:

しばらくフレームワークを使用した後、MVC フレームワークの核心はルーティングにあるようだと突然気づきました。たとえば、TP5 ルーティングは非常に強力ですが、ソース コードには次のような特徴があります。基本的にコメントはありません。2時間読んでも、まだ全体がどのようなものであるか理解できません。

今私にできることは、その後のさまざまなルール ルーティングと通常のルーティングを理解できないことです。実装プロセス、具体的なデモ、チュートリアル、または関連する書籍を教えていただければ幸いです。 O(∩_∩)O ありがとうございます!

他の人のコードを読むことに加えて、より良い方法は、デバッガー (xdebug など) を開いてシングルステップ デバッグを実行することです。一方ではデバッガーからの情報が得られ、もう一方では自分のコードも得られます。実行できる独自の実際のコードを使用すると、理解が容易になります

ルーティングの話題に戻りますが、結局のところ、pathinfo を分割して解析する方法を理解するだけで十分です。 pathinfo を名前空間に直接マッピングすることも、正規表現を使用してコントローラにマッピングすることも、解析方法の 1 つにすぎません。

車輪の再発明を試みたい場合は、名前空間の下のクラスに直接マッピングする最も単純な方法を実装してみることができます

hello/world ->HelloController->world()

test/hello/world -> testHelloController->world()

ルートが解析された後、ここでリフレクションやクロージャなどについて学ぶことができます。
最後に、github にはルーターのみを実装するコンポーネントが多数ありますが、フレームワーク全体と比較して、それらのコンポーネントのコードのみを読み取ることもできます (実際に使用する場合は、composer を介してプロジェクトに導入できます)。

例:

https://github.com/nikic/Fast...

  • https://github.com/dannyvanko...

  • https://github.com/mrjgreen/p...

  • ルーティング実装を推奨します
https://github.com/bephp/router

コードは非常に短く、約100行です

  1. 呼び出し可能な限り、ルートを定義するための get、post、およびその他のメソッドをサポートします。

  2. pathinfo のパラメータの意味を照合するだけでなく、リフレクションによってパラメータも自動的に取得されます (この機能はより便利です)

  3. ツリー構造を使用してルーティング マッピング テーブルを保存すると、一般的に使用されるいくつかのルート (ビーチマーク付き) よりも優れたパフォーマンスが得られます

  4. 「コンパイル」をサポートします。これは、より高速なパフォーマンスを得るためにルーティングテーブルをキャッシュすることに相当します

  5. Composer を使用してインストールでき、依存関係はありません

  6. もちろん、より簡単で直接的な方法もあります

    リーリー
MVC の基本的な考え方は、インターフェイスとロジックを分離することです。個人的には、フロントエンド ルーティングは入り口を統一するだけだと思います。

実際には文字列を抽出して配列に挿入するだけのコードですので、あまり複雑に考えないでください。 リーリー

これは私が最近書いた小さなフレームワークです。ルーティングの実装は比較的簡単なので、見てみると良いと思います。

アドレス: https://github.com/zhoujiangy...

coreフォルダー配下のルートがルーティング実装クラスです

基本的な考え方は、ブラウザーが URL 文字列を通じてコン​​トローラー クラスの名前とメソッドの名前を提供し、それに応じて PHP が対応するクラスとメソッドを見つけるというものです。

具体的なデモコードはここをクリックしてください、http://www.jianshu.com/p/d4ce...

CI のルーティングを調べてみることができます。イテレーター モードを使用してカスタム ルートを反復し、SERVER['REQUEST_URI'] に一致する値を反復出力する、つまりコントローラーとメソッドを取得する、複数の一致モードがあります。そして、新しい class-> メソッドまたは call_user_func() を使用して、対応するメソッドを呼び出します。

お金を出してクラウド購入チュートリアルを視聴してください。公式には詳細なルーティング手順が記載されています

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。