關於php如何實現委託模式

前言

       前幾天看源碼的時候,發現一個源碼使用的一種讓函數自動調用數組中的各種參數用法,很是讓我感興趣,具體是哪個函數,我好像記錯了,記成了func_get_args()
       但是很不幸這個函數是返回這個函數中所有參數的意思。類似的函數有func_get_arg() 以及func_num_args() ,意思返回一個參數,以及返回參數個數。
       後來經過“艱苦”查詢(笑),得到了一個大致答案。那就是一種代碼書寫技巧,即委託模式。所以現在我也試着開始慢慢學着文檔擼一段代碼,來簡單實現下php的委託模式。

寫在前面

       我們先說明一下什麼叫做委託模式,這個有很多稱呼,我就不一一說明了,這個簡單講就是有兩個對象參與處理同一個請求,接受請求的對象將請求委託給另一個對象來處理。(這不就是字面意義嗎,啊喂,摔!) 。那麼如何使用php實現委託模式呢?答案就是利用反射來實現。

關於反射機制

       反射機制是php5之後纔有的新功能(所以基本都有,笑),主要作用是導出或提取出關於類、方法、屬性、參數等的詳細信息,包括註釋(這個牛批了)。具體使用方法,各位看客可以參考下php手冊中的用法
https://www.php.net/manual/zh/class.reflectionclass.php
下面寫一個demo來演示一下這個反射機制的使用方法

//首先創建一個試驗類,這個類裏面基本所有屬性都有了
class A
{
    public $one = 'haha';
    protect $two = 'ahaha';
    private $test="asdasda";
    public function __construct()
    {
        echo 123;
    }
    
    protect function echoOne()
    {
        echo $this->one."\n";
    }
    privatefunction echoTwo()
    {
        echo $this->two."\n";
    }
}
//緊接着就需要php中的強大的反射機制了
//這是獲得類似結果集。。
$reflector = new ReflectionClass('A');
//獲取所有屬性,與getDefaultProperties有區別,類似ASSOC和ROW(笑)
$properties = $reflector->getProperties();
//獲取所有方法
$func=  $reflector->getMethods();
$t1 = $reflector->getDefaultProperties();
var_dump($t1);
var_dump($func);
var_dump($properties);

下面是輸出的結果
在這裏插入圖片描述
       關於反射機制我們就先說到這裏,因爲時間有點晚,剩下我明天再開始(笑),身體最重要。
       關於這個函數,今天找到了是call_user_func_array() 昨天太晚了,沒有總結,哎嘿

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章