この記事では、thinkphp でのローダーの自動読み込みに関する関連知識を提供します。主に Composer の読み込みに関する関連知識が含まれています。皆様のお役に立てれば幸いです。
1. 自動ロードローダーのソースコード分析
#1-1 学習目標
- ##クラスの自動ロード
- ##クラスの自動ロードの 2 つの方法
- spl_autoload_register は、カスタム ファイル クラスの自動読み込みを実装するために
- を使用する必要があります
- 1-2 Composer の読み込み
#ここに画像の説明を挿入します。まず、base.php にローダー クラスをロードし、次に Register this メソッドを呼び出します。 。
次のステップは、プロジェクトのルート パスとコンポーザーのパスです。
#ここに画像の説明を挿入
ここからはコンポーザー ファイルの読み込みです。プロセスも非常に簡単です
- パス配下の autoload_static.php がファイルであるかを判断する ##autoload_static.php ファイルを導入する
- 宣言されたすべてのクラスを返す配列 return
- 最後のクラスを取得する ComposerStaticInit30742487e00917c888d89ba216f165b9
- Judge ComposerStaticInit30742487e00917c888d89ba216f165b9 にデータが存在します配列
- その後、vendor\composer\autoload_static.php ファイルに移動して、これら 2 つの属性を確認できます
ファイルは依然として thinkphp\library\think\Loader.php# の register メソッドです##ここでは、think と traits という 2 つのコマンド スペースが登録されています。次に、addNamespace メソッドを入力します。
addNamespace メソッドでは、Psr4 スペースが追加されます。
次に、addPsr4 メソッドに進みます。両方の名前空間は、
ComposerStaticInit1e269472f484e157e90227b420ffca7a クラスの $prefixLengthsPsr4 プロパティと $prefixDirsPsr4 プロパティに登録されています。
1-4 Psr4
psr とは、単にファイル パスと、対応するファイルを自動的にロードするための関連仕様として理解されます。 class 、現在 TP5.1 は psr4 仕様を使用しています。ここでのクラスは、クラス、インターフェイス、およびスーパー クラスの構造を指します
完全なクラスには次の構造が必要です\
完全なクラス名には、というトップレベルの名前空間が必要です。 "vendor namespace";
完全なクラス名には 1 つ以上のサブ名前空間を含めることができます;
完全なクラス名には最終クラスが必要です名前;###
完全なクラス名のどの部分のアンダースコアにも特別な意味はありません。
完全なクラス名は、任意の大文字と小文字で構成できます。
すべてのクラス名では大文字と小文字を区別する必要があります。
以下は公式の例です。この psr 仕様が理解できる方は理解してみてください
1 - 5 クラス ライブラリ マッピング ファイルをロードします。
この時点で、なぜここに classmap.php ファイルがないのかという疑問が必ず出てきます。
extend このディレクトリは、TP フレームワークを使用しているすべての人が使用し、カスタマイズされたクラス ライブラリ ファイルをこのディレクトリに保存できます。
下の図からわかるように、addAutoLoadDir メソッドを使用してロードします。
メソッドでは、拡張パスを $ に割り当てるだけです。 fallbackDirsPsr4.このプロパティ。
Loader::register(); の部分はこれで終わりです。次に、内部実装と実際のケースを詳しく見ていきます。
上記の読み込みソースコードには 4 つの属性があります。それらを簡単にまとめます。
2. の読み込みプロセスを簡単に説明します。クラス
ここに画像の説明を挿入
ブレークポイントの後の最初にアンロードされたクラスは think\Error
です##なぜ think\Error なのか! thinkphp/base.php に戻って確認してください。自動読み込みが完了すると、最初に実行されるクラスは Error
です。このエラーを Kaka に変更して印刷し、クラスを Kaka に変更します。この時点で、誰もがこのクラスの自動読み込みメカニズムをある程度理解しています。
ここで autoload メソッドを見てみましょう
findFile メソッドから始めて、未使用のクラスがこのメソッドに渡されます。findFile メソッドでは、think\Error クラスによってマップされたファイルが classMap 属性から直接返されます。
Return think\ autoloadのfile変数にErrorクラスのフルパスを返すと、win環境のサイズが一度判定されます。
これで終わりですが、$classMap 属性についても触れておく必要があります。この属性は、classmap.php ファイルに基づいています。このファイルの生成も必要です。コマンド php think optimize:autoload を実行することによって生成されます。
これまでの処理はすべて同じで、findFile だけが異なりますので、簡単に整理してみましょう。
現時点ではコードは classMap を通過しません。
最初に think\Error ファイルを取得します
次に、Composer の自動読み込みの 2 つの属性を通じて名前空間を取得し、think\Error.php ファイルを結合します。
返される最終結果も D:\ です。 phpstudy_pro\ WWW\ThinkPHPSourceCodeAnalysis\thinkphp\library\think\Error.php ファイル。
ここのコードは注意深く読む必要があります。
クラスの自動ロードはここで完全に終了です。
3. カスタム ファイルを使用したクラスの自動読み込みを実装する方法
最初にフォルダー kaka を作成します
この時点で、直接アクセスするために、ファイル Kaka.php をコントローラーのインデックスに導入します
この時点で、このクラスは必ずエラーを報告しますでは、どうすればよいでしょうか? クリックするだけで直接アクセスできます。
ここに画像の説明を挿入
この時点で、ソース コードの重要性が明らかになります。自動的にロードされる register 関数では、extend がロードされることに注意してください。ディレクトリ
##この時点で、kaka ディレクトリを追加し、直接アクセスします
何も問題ありません。直接出てきました。すべてOKです。エクステントのロード方法について話しましょう。
自動ロードクラスライブラリのディレクトリの登録について話したとき、パスを保存しただけだと説明しました。 $fallbackDirsPsr4 属性. 詳細については、次のステップで説明します。
ここに図の説明を挿入してください
このコードは、findFile で確認できます。この属性はよく知られていますが、extend ディレクトリが自動的にロードされるときに $fallbackDirsPsr4 属性に追加されます。
test\Kaka クラスがはっきりとわかります
#この時点で、$fallbackDirsPsr4 属性で返されたファイルを出力します。
次に、__include_file を使用して D を直接含めます。 :\phpstudy_pro\WWW\ThinkPHPSourceCodeAnalysis\kaka\test\Kaka.php 定義したファイル。
上記のカスタム ファイルはどのようにしてクラスの自動ロードを実現しており、extend のロード メソッドでもあります。
thinkphp5
)以上がThinkPHP の Loader の自動ロードを理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版
中国語版、とても使いやすい

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









