此代码不起作用。为什么不行?
<?php
function test()
{
echo 'test';
}
runkit_function_rename('test', 'test2');
test2();
?>我真正想要的是这个。我使用的是一个有功能的系统。当我在localhost上时,我想让这个函数做一些不同的事情。我想用自己的东西覆盖这个函数。
所有替代方案也都是受欢迎的。
发布于 2011-04-28 03:34:31
您是否安装了PECL扩展?
http://www.php.net/manual/en/runkit.installation.php
This » PECL extension is not bundled with PHP.发布于 2012-04-20 01:39:26
我和Runkit的关系也不太好。
你问到了其他选择,我绝对可以推荐这个:
Patchwork是一个PHP函数重写库。换句话说,它和Runkit做的工作差不多。
主要区别在于它是用纯PHP编写的--没有需要安装的扩展;只需要在代码的顶部添加一个require_once()。
另一方面,因为它是纯PHP,所以它只能替换程序中定义的函数;即它不能像Runkit那样覆盖PHP内置函数。您的问题中的示例可以很好地用于Patchwork,但是尝试覆盖mysql_query()这样的PHP函数是不可能的。
然而,与Runkit不同的是,它可以完美地工作,所以如果你能接受这个限制,我强烈推荐它。
Runkit的另一个替代方案,您可能想尝试一下PHP Test Helpers。这是一个PHP扩展,涵盖了几乎与Runkit相同的内容。它是由与PHPUnit相同的作者编写的,所以它应该非常好。然而,当我尝试安装这个的时候,我也没有太多的joy,所以我真的不能对它做太多的评论。
我从你在其他地方对这个问题的评论中注意到,你正在运行Windows (即WAMP)。Windows可执行文件中没有提供Runkit和PHP Test Helpers;为了在Windows中使用它们中的任何一个,您需要自己从C源代码编译扩展。因此,如果您使用的是Windows,那么Patchwork是您唯一明智的选择。
发布于 2011-04-28 03:34:08
我真正想要的是这个。我使用的是一个有功能的系统。当我在localhost上时,我想让这个函数做一些不同的事情。我想用自己的东西覆盖这个函数。
所有替代方案也都是受欢迎的。
function test() {
if($_SERVER['HTTP_HOST'] == 'localhost' {
// do one thing
} else {
// do other thing
}
}如果你打算使用runkit,你需要使用runkit_function_redefine,而不是runkit_function_rename来让相同的函数做不同的事情。
https://stackoverflow.com/questions/5809451
复制相似问题