php中不能直接寫{"key":"value"}
的形式,必須將string|array
用json_encode()
等函式進行轉換,才能變為json
物件。
但是我發現response
函式的$content
引數主要輸入的是array
型別,用postman
得到的輸出結果卻是標準的json
格式。
這不用想,肯定是自動解析成json後才響應給客戶端的啊,但作為程式設計師一定要有分析原始碼的本事,哪怕顯而易見response()
函式肯定得去檢視Response
類,但這也太沒有挑戰性了,於是我立意要換一種方法去探索並找出把$content
值轉換為json
物件的方法。
線路一:
第一步當然是對著response
單詞,按住ctrl
+滑鼠左鍵,於是進入到了下面的函式體:$content
被傳遞到了make()
中,但點選make
死活也無法跳轉。
那怎麼辦才能找到make()
函式屬於哪個類例項的?$factory
例項中應該有這個方法?
嘗試跳轉至app
,
它返回的是Application
類,繼續跳轉至該類:
發現他是個靜態方法,此路不通!
線路二:
能注意到,返回的是Container::getInstance()
例項的一個方法:
我探索了一段時間,啥都沒撈著,這條路算了吧。
線路三:
$content
引數的型別能知道,
於是我嘗試在根目錄下進行了一系列全域性搜尋:$context
有點多,但肯定是請求或響應相關的,於是我對這些結果進行了一番尋找,找到了如下:
這裡的引數是不是和response()
函式的引數一樣?我猜應該就是它了!
於是跳轉至setContext()
,
顯而易見,將array
解析成json
的函式在這裡。
線路四:
make()
函式的返回值是一個Response
型別例項,但是Response
類並沒有make()
函式,
我們再來看一下,make()
函式是被$factory
呼叫的,我們再跳轉至ResponseFactory
看一下,
於是發現了:$factory
的make()
方法即建立一個Response類例項,建立例項就的需要建構函式,
於是:
對上號了!
本作品採用《CC 協議》,轉載必須註明作者和本文連結