在開發微信公眾平台平台的過程中,有這麼幾個參數總是需要傳來傳去,$userOpenId,$message,$time。
在整個程序的運行過程中,為了函數方便的處理,將這三個變量一直放在參數列表裡。關於這點,我突然聯想到在Android裡面,總是有一個Context(上下文)對象傳來傳去的,現在我的理解是,Context裡面存放了一些必要的數據,在整個程序執行的邏輯中都有可能被使用。
因此,我就思考了一下,我這個三個變量要不要包裝成Context呢?性能上會不會有提升?
PHP的函數參數如果是變量的話,都是直接傳變量的拷貝,如果是傳對象的話,是傳對象的指針。也就是說,如果定義了一個String,放到一個函數裡去修改,如果不以返回值的形式返回的話,該變量沒有被修改,被修改的是該變量的一個拷貝。如果是定義一個對象放到函數中去操作,修改的直接就是這個對象本身。
由上面的思考,我認為如果傳對象的話,可能會更快一點(因為不需要復制)。於是,我寫了如下代碼來測試。
<? = = "abcdefghijk" = "我想要查詢什麼" = = Context(, , = 5000 ( = 1; <= ; ++ handleMessageByObject( = "cast:".( - handleMessageByParams(, , "working......["...."]\n" handleMessageByObject( "working......[".->userOpenId.->message.->."]\n" = = = __construct(, , ->userOpenId = ->message = -> = ?>
測試的結果我已經在注釋中寫出,單位是ms(毫秒)。可見,傳Context反而變慢了一點。當然,考慮到這個上下文的環境也不可能在一次代碼中傳來傳去傳5000次,而且性能差異也是非常小的毫秒級,所以,使用上下文對象來傳遞必須的參數是一個更優雅的選擇。