Mode Façade/Apparence (Façade)
Afin de faciliter la tâche des développeurs, le framework a encapsulé à l'avance bon nombre des méthodes système les plus couramment utilisées grâce à la technologie de façade
Supposons que nous définissions une classe appcommonTest, qui a une méthode dynamique hello.
<?php namespace app\common; class Test { public function hello($name) { return 'hello,' . $name; } }
Le code pour appeler la méthode hello doit être similaire à :
$test = new \app\common\Test; // 输出 hello,thinkphp echo $test->hello('thinkphp');
Nous définissons une classe proxy statique appfacadeTest pour cette classe (le nom de la classe est arbitraire, mais le garder unifié facilitera la maintenance).
<?php namespace app\facade; use think\Facade; class Test extends Facade { protected static function getFacadeClass() { return 'app\common\Test'; } }
Tant que cette bibliothèque de classes hérite de thinkFacade, vous pouvez utiliser la méthode statique pour appeler la méthode dynamique de la classe dynamique appcommonTest. Par exemple, le code ci-dessus peut être modifié en :
// 无需进行实例化 直接以静态方法方式调用hello echo \app\facade\Test::hello('thinkphp');
Bibliothèque de classes Core Facade
.Le système fournit des bibliothèques de classes communes intégrées. La bibliothèque de classes Facade est définie, notamment :
bibliothèque de classes (dynamiques) | Classe 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 |
Vous pouvez ainsi facilement effectuer des appels de méthode sans instanciation, par exemple :
use think\facade\Cache; Cache::set('name','value'); echo Cache::get('name');
Lorsque vous faites injection de dépendances, veuillez ne pas utiliser la classe Facade comme contrainte de type, mais il est recommandé d'utiliser la classe dynamique d'origine. Ce qui suit est une mauvaise utilisation :
<?php namespace app\index\controller; use think\facade\App; class Index { public function index(App $app) { } }
La méthode suivante doit être utilisée :
<?php namespace app\index\controller; use think\App; class Index { public function index(App $app) { } }
En fait, l'effet de l'injection de dépendances et de l'utilisation du proxy Facade est dans la plupart des cas. La même chose est d'obtenir l'instance d'objet à partir du conteneur. Par exemple :
<?php namespace app\index\controller; use think\Request; class Index { public function index(Request $request) { echo $request->controller(); } }
a le même effet que le suivant
<?php namespace app\index\controller; use think\facade\Request; class Index { public function index() { echo Request::controller(); } }
En développement réel, il est recommandé d'utiliser : injection de dépendances