首頁  >  文章  >  php框架  >  用PHP特性trait實現簡易Laravel Facade

用PHP特性trait實現簡易Laravel Facade

藏色散人
藏色散人轉載
2022-01-27 16:33:011834瀏覽

以下由Laravel教學專欄跟大家介紹如何利用PHP trait實作簡易Facade,希望對大家有幫助!

## 簡述

##Facade##簡稱##Facade
##Laravel 大部分的擴充包都使用了 Facade。 【推薦:

laravel影片教學

下面的簡易Facade 主要利用PHP 的特性trait

,魔術方法

__callStatic

,反射類別

ReflectionClass

使用場景

後台系統大部分都會有類似這樣的操作:

這樣似乎沒有什麼問題,但還會存在下面這樣的:
$article = Article::find($id);if (!$article) {
    throw new \Expection("资源不存在");}$article->delete();
這樣寫法十分不優雅。

上程式碼

#1、首先我們應該要有一個Service#

2、新建一個Trait

trait 為了多繼承而存在的,可以去PHP官網看文件。

newInstanceArgs();

        // 调用该不存在的方法
        $model = call_user_func_array([$instance, $method], [$arg]);

        // 如果存在复杂操作交给 callback
        return isset($args[2]) ? $args[2]($model) : self::callback($model, $method);
    }}
首先我們專注於 __callStatic 這個魔術方法。當呼叫不存在的靜態方法時會觸發該方法。和他相似的魔術方法是 __call。這是使用 __callStatic 是為了達到 Facade 的效果。

__callStatic 有兩個回呼參數$method

被呼叫的且不存在的方法$args#是$method

方法中所傳遞的參數(陣列形式)。

這樣一個簡易的 trait

就完成了。

使用

我們新一個command

$ php artisan make:command TestCommand
寫入下面的內容

load('author');
        });
    }}

其中的Article 模型需要自己去建立。 接下來就可以看看效果了:

$ php artisan test:test

結語

###這樣我們就拋棄了使用###abstract## # 抽象類,來達到了跟###Facade### 一樣的效果。同時也做到了程式碼復用。 ###這樣使用程式會多走很多步,但跟優雅比起來,性能什麼的都無所謂了。 ######表達不是很清楚,需要自己深入體會了。 ###                    ###                       

以上是用PHP特性trait實現簡易Laravel Facade的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除