thinkphp 5メンツ(Facade)
4674 ワード
ファサード(
ゲートはコンテナ内のクラスに静的呼び出しインタフェースを提供し、従来の静的メソッド呼び出しよりもテスト性と拡張性が向上し、任意の非静的クラスライブラリに
システムはすでにほとんどのコアクラスライブラリに
次の例では、
helloメソッドを呼び出すコードは、次のようになります.
次に、このクラスに静的エージェントクラス
このクラスライブラリが
結果は
率直に言って、Facade機能はクラスをインスタンス化せずに静的に呼び出すことができます.
コア
システムは内蔵の共通クラスライブラリに
クラスライブラリ
Facadeクラス
think\App
think\facade\App
think\Build
think\facade\Build
think\Cache
think\facade\Cache
think\Config
think\facade\Config
think\Cookie
think\facade\Cookie
think\Debug
think\facade\Debug
think\Env
think\facade\Env
think\Hook
think\facade\Hook
think\Lang
think\facade\Lang
think\Log
think\facade\Log
think\Middleware
think\facade\Middleware
think\Request
think\facade\Request
think\Response
think\facade\Response
think\Route
think\facade\Route
think\Session
think\facade\Session
think\Url
think\facade\Url
think\Validate
think\facade\Validate
think\View
think\facade\View
インスタンス化する必要がなく、メソッド呼び出しを容易に行うことができます.たとえば、次のようになります.
依存注入を行う場合は、タイプコンストレイントとして
次の方法を使用します.
システムクラスライブラリをより容易に使用するために、システムはまた、これらの一般的なコアクラスライブラリの
別名クラス
対応するFacadeクラス
App
think\facade\App
Build
think\facade\Build
Cache
think\facade\Cache
Config
think\facade\Config
Cookie
think\facade\Cookie
Db
think\Db
Debug
think\facade\Debug
Env
think\facade\Env
Hook
think\facade\Hook
Lang
think\facade\Lang
Log
think\facade\Log
Middleware
think\facade\Middleware
Request
think\facade\Request
Response
think\facade\Response
Route
think\facade\Route
Session
think\facade\Session
Url
think\facade\Url
Validate
think\facade\Validate
View
think\facade\View
したがって、前のコードは
Facadeクラスはインスタンス化された
Facade
)ゲートはコンテナ内のクラスに静的呼び出しインタフェースを提供し、従来の静的メソッド呼び出しよりもテスト性と拡張性が向上し、任意の非静的クラスライブラリに
facade
クラスを定義できます.システムはすでにほとんどのコアクラスライブラリに
Facade
を定義しているので、Facade
を通じてこれらのシステムクラスにアクセスすることができます.もちろん、アプリケーションクラスライブラリに静的エージェントを追加することもできます.次の例では、
app\common\Test
クラスを定義すると、hello
ダイナミックメソッドが含まれます.
helloメソッドを呼び出すコードは、次のようになります.
$test = new \app\common\Test;
echo $test->hello('thinkphp'); // hello,thinkphp
次に、このクラスに静的エージェントクラス
app\facade\Test
を定義します(このクラス名は必ずしもTest
クラスと一致する必要はありませんが、通常は管理を容易にするために、名前の統一を維持することをお勧めします).
このクラスライブラリが
think\Facade
を継承する限り、動的クラスapp\common\Test
の動的メソッドを静的に呼び出すことができ、例えば、上記のコードを変更することができる.// hello
echo \app\facade\Test::hello('thinkphp');
結果は
hello,thinkphp
も出力されます.率直に言って、Facade機能はクラスをインスタンス化せずに静的に呼び出すことができます.
getFacadeClass
メソッドで静的エージェントを指定するクラスが明示的に指定されていない場合は、呼び出し時に動的にバインドできます.
use app\facade\Test;
use think\Facade;
Facade::bind('app\facade\Test', 'app\common\Test');
echo Test::hello('thinkphp');
bind
メソッドは、バッチ・バインディングをサポートするため、適用される共通関数ファイルでバインディング操作を統一できます.たとえば、次のようにします.Facade::bind([
'app\facade\Test' => 'app\common\Test',
'app\facade\Info' => 'app\common\Info',
]);
コア
Facade
クラスライブラリシステムは内蔵の共通クラスライブラリに
Facade
クラスライブラリを定義し、以下を含む.クラスライブラリ
Facadeクラス
think\App
think\facade\App
think\Build
think\facade\Build
think\Cache
think\facade\Cache
think\Config
think\facade\Config
think\Cookie
think\facade\Cookie
think\Debug
think\facade\Debug
think\Env
think\facade\Env
think\Hook
think\facade\Hook
think\Lang
think\facade\Lang
think\Log
think\facade\Log
think\Middleware
think\facade\Middleware
think\Request
think\facade\Request
think\Response
think\facade\Response
think\Route
think\facade\Route
think\Session
think\facade\Session
think\Url
think\facade\Url
think\Validate
think\facade\Validate
think\View
think\facade\View
インスタンス化する必要がなく、メソッド呼び出しを容易に行うことができます.たとえば、次のようになります.
use think\facade\Cache;
Cache::set('name','value');
echo Cache::get('name');
think\Db
クラスの実装は本来Facade
メカニズムに類似しているので,静的エージェントを行う必要がなく静的メソッド呼び出しを用いることができる(正確にはDb
クラスはメソッドがなく,いずれも呼び出しのQuery
クラスのメソッドである).依存注入を行う場合は、タイプコンストレイントとして
Facade
クラスを使用しないで、元のダイナミッククラスを使用することをお勧めします.次は誤った使い方です.
次の方法を使用します.
システムクラスライブラリをより容易に使用するために、システムはまた、これらの一般的なコアクラスライブラリの
Facade
クラスにクラスライブラリ別名を登録し、静的呼び出しを行うときに簡略化された別名を直接使用して呼び出すことができる.別名クラス
対応するFacadeクラス
App
think\facade\App
Build
think\facade\Build
Cache
think\facade\Cache
Config
think\facade\Config
Cookie
think\facade\Cookie
Db
think\Db
Debug
think\facade\Debug
Env
think\facade\Env
Hook
think\facade\Hook
Lang
think\facade\Lang
Log
think\facade\Log
Middleware
think\facade\Middleware
Request
think\facade\Request
Response
think\facade\Response
Route
think\facade\Route
Session
think\facade\Session
Url
think\facade\Url
Validate
think\facade\Validate
View
think\facade\View
したがって、前のコードは
\Cache::set('name','value');
echo \Cache::get('name');
Facadeクラスはインスタンス化された
instance
メソッドを定義し、クラスにも定義があれば失効します.