【问题标题】:Change the content of PHP classes and methods at runtime, with Reflection?在运行时改变PHP类和方法的内容,用Reflection?
【发布时间】:2011-08-03 09:41:04
【问题描述】:

仅供娱乐,请勿尖叫。

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

使用反射还是其他?

请不要关闭这个问题,我正在寻找除了 runkit 之外的另一个答案。

【问题讨论】:

  • 啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!
  • 我认为解决此问题的一种可能(但错误的方法)是在文件上调用file_get_contents,进行所需的更改,然后调用eval。缺点是您必须创建一个加载器,因为自己加载文件将是一个巨大的痛苦(或无限循环)。
  • PHP runtime class modification 的可能重复项
  • 我认为它不应该关闭,因为旧副本中提出的唯一解决方案是“runkit”,而 runkit 非常非常老......我正在寻找想法!
  • 如果你不想使用runkit,唯一的选择是classkit。同样旧,不确定它是否适用于当前的 PHP 设置。

标签: php reflection


【解决方案1】:

为什么不简单地创建一个新类来继承您要修改的类并覆盖它的方法?

<?php
class MySimpleXML extends SimpleXMLElement {
    public function themethodiwanttooverwrite() {
        //...
    }
}
?>

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

【讨论】:

  • 是的,但我也必须更改使用该类的代码(使其使用我的类),我不想这样做:(
猜你喜欢
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多