在运行时使用反射更改PHP类和方法的内容?

3

这只是为了好玩,不要尖叫。

我想在运行时重写类的方法内容(我的意思是,不修改文件,只是在内存中替换/编辑代码),这是否可能?

使用反射或其他任何东西?

请不要关闭此问题,请给我一个不同于runkit的答案。


8
啊啊啊啊啊啊啊啊啊!!!!!!!!!!! - k to the z
我认为一个可能的(但错误的)解决方法是在文件上调用file_get_contents,进行所需的更改,然后调用eval。缺点是你必须基本上创建一个加载器,因为让一个文件加载自身将会是非常麻烦的(或者如果不小心会导致无限循环)。 - Mr. Llama
可能是 PHP 运行时类修改 的重复问题。 - netcoder
1
我认为它不应该关闭,因为在旧的重复问题中提出的唯一解决方案是“runkit”,而runkit非常古老... 我正在寻找想法! - Matthieu Napoli
@Matthieu,php://memory是一个文件句柄,因此您无法将其交给include。在这里,您可以使用eval来实现相同的效果。 (好吧,您可以在这里使用data:,但是当禁用allow_url_include时,它受到限制,最好不要使用。) - Charles
显示剩余3条评论
1个回答

0
为什么不直接创建一个继承自你想要修改的类的新类,并重写它的方法呢?
<?php
class MySimpleXML extends SimpleXMLElement {
    public function themethodiwanttooverwrite() {
        //...
    }
}
?>

只要该方法没有标记为final...

是的,但我也必须更改正在使用该类的代码(以使其使用我的类),这是我不想做的 :( - Matthieu Napoli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接