長篇小說我正在使用一個遺留的代碼庫,它大量使用PHP的內置call_user_func_array函數。我試圖讓它使用PHP 5.3(5.2升級)的工作,但已運行到這裏描述的問題(即「傳遞非陣列」一節):我可以擴展內置PHP函數嗎?
http://sixohthree.com/1486/migrating-to-php-5-3-call_user_func_array
簡而言之,問題是在PHP版本5.2和5.3之間,這個函數的行爲被改變了,所以它基本上什麼都不做,並且如果第二個參數不是一個合適的數組/對象/關聯數組,那麼返回NULL
。 5.2沒有這樣做,因此我正在使用的代碼庫不會確保它傳遞正確類型的參數。這會導致問題。
要解決這個問題,我可以按照博客文章中的說明去尋找代碼庫中的每一個call_user_func_array
調用並修補它們,但這會非常繁瑣。另外,我注意到PHP有一個內置的override_function API調用,可用於覆蓋內置函數。這很方便,但我想要做的更像是擴展內置函數。
理想情況下,我想要的是能夠用的東西大致如下,以取代call_user_func_array
實現:
function call_user_func_array($method, $params) {
$params = is_array($params) ? $params : array($params);
return old_call_user_func_array($method, $params);
}
...其中old_call_user_func_array
是內置call_user_func_array
功能。
這是可能的,如果是這樣,如何?
由於代碼不符合記錄的API,因此它基本上已損壞,您需要在某個時刻修復該功能的每個實例,而不是在修補程序中分層。我可以看到你可能需要一個臨時解決方法,所以無論如何+1。 :) – deceze 2012-01-11 04:40:05
可能重複的http://stackoverflow.com/questions/4725194/php-override-existing功能 – Nazariy 2012-01-11 04:44:18
@Nazariy - 該線程不處理保留舊功能。仔細閱讀OP的問題。 – 2012-01-11 04:49:38