前言
前幾天看源碼的時候,發現一個源碼使用的一種讓函數自動調用數組中的各種參數用法,很是讓我感興趣,具體是哪個函數,我好像記錯了,記成了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() 昨天太晚了,沒有總結,哎嘿