在搬磚時候經(jīng)常遇到要new一個對象的時候童芹,但是new很多對象時候就很煩惱涮瞻,很煩。
感覺太累贅假褪,不夠優(yōu)雅署咽。
<?php
class People
{
public function say($string)
{
echo $string;
}
}
$peo1 = new People();
$peo1->say('打翻你的洗澡盆');
這是常用的調(diào)用模式
但是這個人很能叭叭,代碼里到處都有他的存在生音,每次都是把他new出來宁否。
這就感覺很麻煩,我不想new他了缀遍,想拿來直接調(diào)用慕匠。
TP中提供了這么一個模式:門面(Facade)
官方是這么說的:
意思就是:它可以將非靜態(tài)的類作為靜態(tài)類使用
我們看一下怎么實現(xiàn)
官網(wǎng)是這樣寫的
實現(xiàn)一下
還是繼續(xù)用上面的類:
<?php
// file_path: /extends/People.php
class People
{
public function say($string)
{
echo $string;
}
}
我們的People類在extends下,里邊有一個say方法域醇。
我們給他設置一個代理
通過這個代理可以將所有方法轉(zhuǎn)化為靜態(tài)方法
可以讓所有的調(diào)用通過代理再轉(zhuǎn)發(fā)到People類中台谊,只需要使用的時候use think\facade\類名
即可
- 在/thinkphp/library/think/facade/ 中新建代理類(People.php)
我們發(fā)現(xiàn)平常使用的think\facade\Request
類就在此目錄下
這樣就可以大體理解Facade的作用跟他的使用方法了
我們給People設置一個代理類
<?php
namespace think\facade; // 代理類的命名空間
use think\Facade; // 用到use think\Facade, 代理類要繼承他
/**
* 函數(shù)注解
* @see \People
* @mixin \Loggers
* @method void say(string $string) static 說話方法
*/
class Build extends Facade
{
// 聲明此代理類 代理的哪個類
protected static function getFacadeClass()
{
return '\People'; // 返回此代理對應的類名,People在extends下譬挚,所以是\People锅铅,具體情況根據(jù)類的命名空間來引用
}
}
注意,函數(shù)注解一定要寫上(注解請另行搜索减宣,我也不是很熟悉就不誤人子弟了)盐须,不然通過通過代理靜態(tài)調(diào)用類的方法時,IDE會不識別類的方法
static關鍵字寫上后漆腌,對應的類即可靜態(tài)調(diào)用
這個代理類寫好后贼邓,我們在代碼其它地方需要用到People類時候只需
<?php
...
public function fun()
{
People::say('打翻你的洗澡盆');
}
...
就能完成方法調(diào)用了姨蟋,一句代碼就能帶過,不用再到處new這么麻煩了立帖。