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
thinkAppthinkfacadeApp
thinkCache thinkfacadeCache
thinkConfigthinkfacadeConfig
thinkCookiethinkfacadeCookie
thinkDbthinkfacadeDb
thinkEnvthinkfacadeEnv
thinkEvent thinkfacadeEvent
thinkFilesystem thinkfacadeFilesystem
thinkLangthinkfacadeLang
thinkLogthinkfacadeLog
thinkMiddlewarethinkfacadeMiddleware
thinkRequestthinkfacadeRequest
thinkResponsethinkfacadeResponse
thinkRoutethinkfacadeRoute
thinkSessionthinkfacadeSession
thinkValidatethinkfacadeValidate
thinkViewthinkfacadeView


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