ホームページ >バックエンド開発 >PHPチュートリアル >thinkPHP5.0フレームワークの自動読み込みメカニズムの詳細な分析

thinkPHP5.0フレームワークの自動読み込みメカニズムの詳細な分析

黄舟
黄舟オリジナル
2017-03-20 09:13:451698ブラウズ

この記事では、主に thinkPHP5.0 フレームワーク自動読み込みのメカニズムを紹介し、thinkPHP5.0 自動読み込みの概念、原理、使用法および関連する側面をより詳細に分析しますメモ。記事

thinkPHP5.0 フレームワークの自動読み込みメカニズムについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

概要

ThinkPHP5.0は真にオンデマンドロードを実現し、すべてのクラスライブラリは自動ロードメカニズムを採用し、クラスライブラリマッピングの自動ロードをサポートします。そしてコンポーザークラスライブラリ。

自動ローディングの実装は thinkLoader クラス ライブラリによって完了し、自動ローディングの仕様は PHP の PSR-4 に準拠しています。

自動読み込み

ThinkPHP の新しいバージョンは名前空間 機能を完全に採用しているため、必要なのはクラス ライブラリが配置されている名前空間を正しく定義することだけであり、名前空間のパスはクラス ライブラリのディレクトリと一致しています。クラス ライブラリ ファイルを作成すると、クラスの自動読み込みを実装できます。

クラス ライブラリの自動ロード検出の順序は次のとおりです:

1. クラス ライブラリ マッピングの検出
3. PSR-0 の自動ロード検出;検出されたら、有効になると、対応するクラス ライブラリ ファイルが自動的にロードされます。

クラスライブラリマッピング

上記の名前空間定義仕様に従えば、基本的にはクラスライブラリの自動読み込みを完了できますが、より多くの名前空間を定義すると効率が低下するため、クラスライブラリマッピングを定義することができます。一般的に使用されるクラス ライブラリ用。名前付きクラス ライブラリのマッピングは、クラス ファイルのエイリアスを定義することと同等であり、名前空間の配置よりも効率的です。例:

Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php');
Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');

また、addClassMap メソッドを使用してクラス ライブラリ マッピング定義をバッチでインポートすることもできます。例:

$map = [
  'think\Log'   => LIB_PATH.'think\Log.php',
  'org\util\array'=> LIB_PATH.'org\util\Array.php'
];
Loader::addClassMap($map);

クラス ライブラリ マッピングを通じて、この方法で登録されたクラスは名前空間ディレクトリに対応する必要はありませんが、それでも PSR-4 仕様に従ってクラス ライブラリとディレクトリを定義することをお勧めします。

クラス ライブラリのインポート

システムの自動ロード機能が必要ない場合、または名前空間を使用しない場合は、thinkLoader クラスのインポート メソッドを使用してクラス ライブラリ ファイルを手動でロードすることもできます。 :

Loader::import('org.util.array');
Loader::import('@.util.upload');

Example

// 引入 extends/qrcode.php
Loader::import('qrcode', EXTEND_PATH);
// 助手函数
import('qrcode', EXTEND_PATH);
// 引入 extends/wechat-sdk/wechat.class.php
Loader::import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
// 助手函数
import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');

クラス ライブラリのインポートでも同様の名前空間の概念が使用されます (ただし、実際の名前空間のサポートは必要ありません)。サポートされている「ルート名前空間」は次のとおりです。
目次 説明
動作 システム動作クラスライブラリ
think コア基本クラスライブラリ
特性 システム特性クラスライブラリ
app アプリケーションクラスライブラリ
@ は、現在のモジュールクラスライブラリパッケージを表します


システムの名前空間定義に完全に準拠している場合、一般的に、クラス ライブラリ ファイルを手動でロードして直接インスタンス化する必要はありません。

Composer の自動ロード

バージョン 5.0 は、Composer によってインストールされたクラス ライブラリの自動ロードをサポートしており、Composer 依存ライブラリの名前空間に従ってそれらを直接呼び出すことができます。

以上がthinkPHP5.0フレームワークの自動読み込みメカニズムの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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