【问题标题】:How can I override built in php functions [duplicate]如何覆盖内置的php函数[重复]
【发布时间】:2011-06-27 09:32:19
【问题描述】:

可能重复:
Redefine Built in PHP Functions

如何覆盖内置的 PHP 函数?

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

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

我想以这样的方式重新处理这个,每当发出 sql 连接请求时,系统必须检查连接是否已经存在。

由于系统不是用 MVC 编写的,所以我不能在所有地方都进行更改以替换与公共对象的连接。

有人可以帮帮我吗?

【问题讨论】:

  • 来自documentation如果使用相同的参数再次调用mysql_connect()不会建立新的链接,而是将返回已打开链接的链接标识符。 您是否在每次调用时明确请求新链接?还是你改变参数?如果没有,则无需覆盖该函数。 mysql_connect 已经重用了连接。
  • 您可能正在寻找mysql_pconnect。还请记住,您可以通过各种runtime configurations 配置 mysql 允许使用的连接数量
  • 您无需拥有 MVC 架构的应用程序即可使用类!请停止混淆这两件事!
  • 是的,没错,但是我没有时间创建新的 DBUtility 类来将连接函数放在公共位置。
  • tip:下次你提问的时候,把这些你做不到的事情马上放到问题里。那么你就不必抱怨你得到的合理建议,因为那样他们就会从一开始就告诉你没有希望。

标签: php


【解决方案1】:

有关您问题的字面答案,请参阅重复链接:Redefine Built in PHP Functions

但是,覆盖原生的mysql_family 函数将是徒劳的。您必须在 PHP 中重新实现它们的功能,这可能是不可能的 - 它们是 mysql 扩展的一部分,我假设是用 C 编写的。

我认为你唯一的方法是定义一个替代类或一组函数,然后在旧系统中进行搜索 + 替换,将所有 mysql_ 调用替换为对新调用的调用。

【讨论】:

  • 我做不到。正如我所说,有很多联系。我不能只替换 'mysql_connect' 函数。因为所有的连接都是不同的。连接不存储在任何地方。未使用任何对象。
  • @Sahal 为什么不能进行搜索和替换?
  • 你能告诉我你所说的搜索和替换是什么意思吗?你将替换什么?我在哪里调用“mysql_function”?
  • 我没有使用任何通用对象。每个呼叫都像新呼叫一样。我无法检查 if($connection_exists) 返回连接。
  • @Sahal:文本搜索和替换。我希望你也阅读我的评论。您尝试做的事情可能没有任何效果。
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 2011-06-11
  • 1970-01-01
  • 2012-11-10
  • 2013-06-13
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多