Fassaden-/Aussehensmodus (Fassade)
Um Entwicklern die Arbeit zu erleichtern, hat das Framework viele der am häufigsten verwendeten Systemmethoden im Voraus durch Fassadentechnologie gekapselt.
Angenommen, wir definieren eine appcommonTest-Klasse, die eine Hallo-Dynamik enthält Methoden.
<?php namespace app\common; class Test { public function hello($name) { return 'hello,' . $name; } }
Der Code zum Aufrufen der Hello-Methode sollte ähnlich sein wie:
$test = new \app\common\Test; // 输出 hello,thinkphp echo $test->hello('thinkphp');
Wir definieren eine statische Proxy-Klasse appfacadeTest für diese Klasse (der Klassenname ist willkürlich, aber die Einheitlichkeit erleichtert die Wartung ).
<?php namespace app\facade; use think\Facade; class Test extends Facade { protected static function getFacadeClass() { return 'app\common\Test'; } }
Solange diese Klassenbibliothek thinkFacade erbt, können Sie die statische Methode verwenden, um die dynamische Methode der dynamischen Klasse appcommonTest aufzurufen. Der obige Code kann beispielsweise geändert werden in:
// 无需进行实例化 直接以静态方法方式调用hello echo \app\facade\Test::hello('thinkphp');
Kern-Facade-Klassenbibliothek
Das System definiert Facade-Klassenbibliotheken für integrierte, häufig verwendete Klassenbibliotheken, einschließlich:
(动态)类库 | Facade类 |
---|---|
thinkApp | thinkfacadeApp |
thinkCache | thinkfacadeCache |
thinkConfig | thinkfacadeConfig |
thinkCookie | thinkfacadeCookie |
thinkDb | thinkfacadeDb |
thinkEnv | thinkfacadeEnv |
thinkEvent | thinkfacadeEvent |
thinkFilesystem | thinkfacadeFilesystem |
thinkLang | thinkfacadeLang |
thinkLog | thinkfacadeLog |
thinkMiddleware | thinkfacadeMiddleware |
thinkRequest | thinkfacadeRequest |
thinkResponse | thinkfacadeResponse |
thinkRoute | thinkfacadeRoute |
thinkSession | thinkfacadeSession |
thinkValidate | thinkfacadeValidate |
thinkView | thinkfacadeView |
Also du Methodenaufrufe können problemlos ohne Instanziierung durchgeführt werden, zum Beispiel:
use think\facade\Cache; Cache::set('name','value'); echo Cache::get('name');
Wenn Sie eine Abhängigkeitsinjektion durchführen, verwenden Sie bitte nicht die Facade-Klasse als Typbeschränkung. Stattdessen wird empfohlen, die ursprüngliche dynamische Klasse zu verwenden ist ein Fehler Verwendung:
<?php namespace app\index\controller; use think\facade\App; class Index { public function index(App $app) { } }
sollte wie folgt verwendet werden:
<?php namespace app\index\controller; use think\App; class Index { public function index(App $app) { } }
Tatsächlich ist der Effekt der Abhängigkeitsinjektion und der Verwendung des Facade-Proxys in den meisten Fällen derselbe, beide dienen dazu, ein Objekt zu erhalten Instanzen aus dem Container. Beispiel:
<?php namespace app\index\controller; use think\Request; class Index { public function index(Request $request) { echo $request->controller(); } }
hat den gleichen Effekt wie das folgende
<?php namespace app\index\controller; use think\facade\Request; class Index { public function index() { echo Request::controller(); } }
. In der tatsächlichen Entwicklung wird empfohlen, es zuerst zu verwenden: Abhängigkeitsinjektion