2011-06-27 68 views
1

可能重复:
Redefine Built in PHP Functions我怎么能覆盖操作中内置了PHP函数

我如何可以覆盖内置的PHP函数?

我想覆盖mysql_connection函数,函数应该检查连接是否已经打开,只是返回该连接或者请求一个新的连接。

我正在使用一些遗留系统,它在每个页面上有1000个连接。这会降低网站的性能,并可能导致内存使用不良。

我想以这样一种方式重做这个事情,即每当发出sql连接请求时,系统都必须检查连接是否已经存在。

我不能去所有的地方更换连接到公共对象,因为系统没有写在MVC中。

有人可以帮助我吗?

+6

从[documentation](http://php.net/manual/en/function.mysql-connect.php):*如果使用相同的参数对'mysql_connect()'进行第二次调用,**不会建立新的连接**,而是返回已经打开的链接的链接标识符。*您是否在每次调用时明确请求新链接?或者你改变参数?如果不是,则不需要覆盖该功能。 'mysql_connect'已经重新使用连接。 –

+3

您可能正在寻找['mysql_pconnect'](http://de3.php.net/manual/en/function.mysql-pconnect.php)。另外请记住,你可以配置mysql允许通过各种[运行时配置](http://de3.php.net/manual/en/mysql.configuration.php)使用的连接数量 – Gordon

+0

你不需要需要有一个MVC架构的应用程序才能使用类!请停止混淆这两件事! –

回答

2

对于字面回答你的问题,看到重复的链接:Redefine Built in PHP Functions

然而,覆盖本地mysql_家庭的功能将是徒劳的任务。你将不得不在PHP中重新实现它们的功能,这可能是不可能的 - 它们是mysql扩展的一部分,我假设它是用C编写的。我认为你去的唯一途径是定义一个替代类别或功能集合,然后在旧系统中进行搜索+替换,用所有新呼叫代替所有mysql_呼叫。

+0

我不能那样做。正如我所说有这么多的连接。我不能只取代'mysql_connect'函数。因为所有的连接都不同。连接不存储在任何地方。没有使用对象。 – Sahal

+0

@Sahal为什么你不能做搜索和替换? –

+0

你能告诉我你的意思是通过搜索和替换吗?你会取代什么?在哪里“mysql_function”我打电话? – Sahal