Mod Fasad/Penampilan (Fasad)


Untuk memudahkan pembangun, rangka kerja telah merangkumkan banyak kaedah sistem yang paling biasa digunakan terlebih dahulu melalui teknologi fasad

Jika kita mentakrifkan kelas appcommonTest, terdapat kaedah hello dinamik di dalamnya.

<?php
namespace app\common;

class Test
{
    public function hello($name)
    {
        return 'hello,' . $name;
    }
}

Kod untuk memanggil kaedah helo hendaklah serupa dengan:

$test = new \app\common\Test;
// 输出 hello,thinkphp
echo $test->hello('thinkphp');

Kami mentakrifkan appfacadeTest kelas proksi statik untuk kelas ini (nama kelas adalah sewenang-wenangnya, tetapi mengekalkannya bersatu akan memudahkan penyelenggaraan).

<?php
namespace app\facade;

use think\Facade;

class Test extends Facade
{
    protected static function getFacadeClass()
    {
    	return 'app\common\Test';
    }
}

Selagi perpustakaan kelas ini mewarisi thinkFacade, anda boleh menggunakan kaedah statik untuk memanggil kaedah dinamik appcommonTest kelas dinamik Contohnya, kod di atas boleh ditukar kepada:

// 无需进行实例化 直接以静态方法方式调用hello
echo \app\facade\Test::hello('thinkphp');

Pustaka kelas Core Facade

.

Sistem ini menyediakan perpustakaan kelas biasa terbina dalam Perpustakaan kelas Facade ditakrifkan, termasuk:


thinkfacadeCache thinkfacadeConfigthinkfacadeCookienkbthinkthinkEnvthinkfacadeEnvthinkEvent thinkfacadeEventthinkFilesystemthinkfacadeFilesystemthinkLangthinkfacadeLangthinkLogthinkfacadeLogthinkRequestthinkfacadeRequestthinkResponse thinkfacadeResponsethinkRoutethinkSessionthinkfacadeSessionthinkValidatethinkfacadeValidatethinkViewthinkViewthinkViewthinkView
Perpustakaan kelas (dinamik) Kelas fasad
thinkCache
thinkConfig
thinkCookie
thinkfacadeLang


Jadi anda boleh membuat panggilan kaedah dengan mudah tanpa instantiasi, contohnya:

use think\facade\Cache;

Cache::set('name','value');
echo Cache::get('name');

Apabila melakukan suntikan pergantungan, sila jangan Gunakan kelas Facade sebagai kekangan jenis, tetapi disyorkan untuk menggunakan kelas dinamik asal Berikut adalah penggunaan yang salah:

<?php
namespace app\index\controller;

use think\facade\App;

class Index
{
    public function index(App $app)
    {
    }
}

Kaedah berikut harus digunakan:

<?php
namespace app\index\controller;

use think\App;

class Index
{
    public function index(App $app)
    {
    }
}

Sebenarnya, kesan suntikan pergantungan dan menggunakan proksi Fasad dalam kebanyakan kes ialah Perkara yang sama ialah mendapatkan contoh objek daripada bekas. Contohnya:

<?php
namespace app\index\controller;

use think\Request;

class Index
{
    public function index(Request $request)
    {
        echo $request->controller();
    }
}

mempunyai kesan yang sama seperti berikut

<?php
namespace app\index\controller;

use think\facade\Request;

class Index
{
    public function index()
    {
        echo Request::controller();
    }
}

Dalam perkembangan sebenar, disyorkan untuk menggunakan: suntikan pergantungan