PHP runkit_函数重命名don';不行?

PHP runkit_函数重命名don';不行?,php,function,rename,Php,Function,Rename,这个代码不起作用。为什么不呢 <?php function test() { echo 'test'; } runkit_function_rename('test', 'test2'); test2(); ?> 我真正想要的是这个。我使用的是一个有功能的系统。当我在localhost上时,我希望该函数做一些不同的事情。我想用自己的东西重写这个函数 所有的选择都是受欢迎的 我真正想要的是这个。我使用的是一个有功能的系统。当我在localhost上时,我希望该函数做一些不

这个代码不起作用。为什么不呢

<?php
function test()
{
    echo 'test';
}
runkit_function_rename('test', 'test2');
test2();
?>

我真正想要的是这个。我使用的是一个有功能的系统。当我在localhost上时,我希望该函数做一些不同的事情。我想用自己的东西重写这个函数

所有的选择都是受欢迎的

我真正想要的是这个。我使用的是一个有功能的系统。当我在localhost上时,我希望该函数做一些不同的事情。我想用自己的东西重写这个函数

所有的选择都是受欢迎的


如果设置为使用runkit,则需要使用
runkit\u function\u redefinite
,而不是
runkit\u function\u rename
,以使相同的函数执行不同的操作。

是否安装了PECL扩展


如前所述,最好在函数体内部区分$\u SERVER['HTTP\u HOST']的值

虽然我个人认为这是一种糟糕的风格,但您甚至可以在其他函数或块中定义函数

此代码段定义了一个函数get\u template\u part():


不幸的是,这对您的情况没有帮助,因为get_template_part()的定义已经超出了您的能力范围。

尽管runkit库安装正确,但也有人可能会遇到runkit_function_*函数无法工作的情况。这是因为有些PHP版本(可能至少都是5.2.*)的这些函数被破坏了,从这里可以看出:

我也从来没有使用过Runkit

你要求其他选择,我绝对可以推荐这个:

Patchwork是一个PHP函数重写库。换句话说,它的工作与Runkit基本相同

主要区别在于,它是用纯PHP编写的,不需要安装扩展;只需在代码顶部添加一个
require\u once()

另一方面,因为它是纯PHP,所以只能替换程序中定义的函数;ie不能像Runkit那样重写PHP内置函数。您问题中的示例可以很好地使用补丁,但是不可能尝试重写像
mysql\u query()
这样的PHP函数

然而,与Runkit不同,它工作得非常完美,所以如果你能接受这个限制,我强烈推荐它

您可能希望尝试的Runkit的另一个替代方案是。这是一个PHP扩展,涵盖了与Runkit几乎相同的领域。它和PHPUnit是同一个作者写的,所以应该很不错。然而,当我试图安装它的时候,我也没有太多的乐趣,所以我真的不能对此发表太多评论


我从你在其他地方对这个问题的评论中注意到,你正在运行Windows(即WAMP)。Runkit和PHP测试助手均未提供Windows可执行文件;为了在Windows中使用它们,您需要自己从C源代码编译扩展。因此,如果您使用的是Windows,那么修补是您唯一明智的选择。

什么是“不工作”?您是否收到某种错误消息?为什么不实现两个类和一个工厂,根据脚本运行的当前服务器提供其中一个类的实例?另外:您的主机上是否安装了runkit?@Pascal。我在C:\wamp\www\concepts\runkit\index.php的第6行得到“致命错误:调用未定义的函数runkit\u function\u rename()”@Stefan。我不想在系统核心的函数中添加类。我将其添加到php.ini“runkit.internal_override=On”中,但仍然显示相同的错误消息。get_template_part()是我需要在Wordpress中重写的函数。如果没有安装runkit,php.ini调整将不会起作用。这就是为什么它不起作用,这就是为什么告诉我们你得到了什么错误是有帮助的。不。也许我应该试试。顺便说一句,我使用WAMP。如果没有安装它,您可能会得到一个“找不到函数”错误,因为在这种情况下函数不存在:)Runkit没有为Windows提供可执行文件;你需要自己编译。是的,我试过重定义函数。可能缺少要安装的内容。在这种情况下,代码示例不适用于我。我不能改变函数,因为它在核心。这就是我想要覆盖它的原因。您可以使用正确的
php.ini
设置更改runkit的核心函数,但必须安装runkit,这似乎是您的更大问题。
function test() {
  if($_SERVER['HTTP_HOST'] == 'localhost' {
     // do one thing
  } else {
     // do other thing
  }
}
This » PECL extension is not bundled with PHP.
if($_SERVER['HTTP_HOST'] == 'localhost' {

  function get_template_part() {
  }

} else {

  function get_template_part() {
  }

}