[英]it is possible to extend a php function?
我的问题是,是否可以扩展声明的函数。
我想扩展mysql_function来添加mysql查询,将一些日志插入表中:'query' - mysql_query,date,page ...等参数
我的问题是,是否可以扩展声明的函数。
没有。
你可以扩展一个类方法并调用parent::methodname()
来运行前面的代码(这几乎就是你要求的),但是对于普通函数,没有办法做到这一点。
有一些深奥的PHP扩展允许覆盖功能,但我认为这不是你需要的,它们的使用很少实用。
您可能想要做的是创建一个新函数,并调用其中的现有函数。
不,你做不到。 启用MySql查询日志或将执行查询的代码包装到Logging Decorator中,或使用Zend_Db之类的抽象,可以使用Profiler或使用透明日志插件来实现mysqlnd
来自http://php.net/manual/en/function.rename-function.php
bool rename_function(string $ original_name,string $ new_name)
在全局函数表中将orig_name重命名为new_name。 用于暂时覆盖内置函数。
我相信如果你将原始文件重命名为original_mysql_query,那么添加你的替换函数来执行你的日志记录,然后调用original_mysql_query等,你将实现你的目标,假设你有办法在每个调用MySQL_query的页面上注入重命名。 。 大多数大型网站都有公共代码,这些代码包含在每个页面的顶部,可以为您执行此操作。
还有一个内置的php函数叫做override_function(由ChrisH提到)。 它没有在php手册页中完整记录,但是如果您更喜欢rename_function函数,那么doc下面的用户注释会为您提供使用它所需的信息。 如果您需要从替换中调用原始函数,则会讨论限制为一个覆盖。 使用rename_function而不是override函数可以消除这种潜在的限制。
您需要编写一个将接受查询的函数,首先记录sql,运行查询,然后返回结果。
例如
<?php
function mysql_query_log($sql)
{
mysql_query('insert into .... values ...');
$r = mysql_query($sql);
$results;
//do the normal thing you do with mysql here
return $results;
}
这不是扩展函数,但是你只能扩展一个类
这是不可能的。
您应该已经创建了自己的API(或使用现有的API)来访问数据库,因此当您需要日志记录时,您可以简单地增强自己的API函数。 如果您需要一些自定义错误处理功能,它也非常方便。 重构代码。
嗯.. PHP说这个: http : //php.net/manual/en/function.override-function.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.