长篇小说我正在使用一个遗留的代码库,它大量使用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