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() {
}
}