当前位置: 首页 > 面试题库 >

重新定义类方法或类

庞意智
2023-03-14
问题内容

有没有不用典型继承就可以重新定义类或其某些方法的方法?例如:

class third_party_library {
    function buggy_function() {
        return 'bad result';
    }
    function other_functions(){
        return 'blah';
    }
}

我该怎么做才能代替buggy_function()?显然这是我想做的

class third_party_library redefines third_party_library{
    function buggy_function() {
        return 'good result';
    }
    function other_functions(){
        return 'blah';
    }
}

这是我的两难选择:我更新了破坏我的代码的第三方库。我不想直接修改该库,因为将来的更新可能会再次破坏代码。我正在寻找一种无缝的方法来替换类方法。

我发现这个库说可以做到,但是我很警惕,因为它已经有4年的历史了。

编辑:

我应该澄清的是,由于框架的限制,我不能将类从重命名为third_party_libraryto
magical_third_party_library或其他任何名称。

就我的目的而言,是否可以向类中添加一个函数?我认为您可以在C#中使用“部分类”来完成此操作。


问题答案:

这就是所谓的Monkey修补。但是,PHP没有本机支持。

但是,正如其他人也指出的那样,runkit库可用于增加对该语言的支持,并且是classkit的后继者。并且,尽管它似乎已被其创建者放弃(已经声明它与PHP5.2及更高版本不兼容),但该项目现在似乎有了新的家和维护者。

不过,您runkit_method_redefine似乎正在寻找它,并且可以/tests/runkit_method_redefine.phpt在存储库中找到其用法的示例:

runkit_method_redefine('third_party_library', 'buggy_function', '',
    'return \'good result\''
);


 类似资料:
  • 问题内容: 在JavaScript中使用构造函数创建类时,以后是否可以重新定义类的方法? 例: 现在,我想像这样重新定义: 因此,当我创建另一个时,新方法将被称为: 编辑: 我意识到我可以输入“ Hello”或“Hola”之类的参数来完成不同的输出。我还意识到我可以像这样简单地为p2分配一个新函数: 我只是想知道是否可以重新定义类的方法,以便的新实例将使用新方法。 问题答案: 以后可以重新定义类的

  • 我试图重新定义简单的非静态方法,但遇到了一个例外: 类别: 电话: 上面的类是scala类,但它们编译为标准的java类。 如何正确地重新定义方法?

  • 我有以下问题: 当使用 dplyr 在 group_by() 之后改变数字列时,如果一行只包含一个值,即使用 mutate 命令时的 NaN,则此值将失败。 因此,如果分组列包含数字,它将正确地分类为dbl,但只要一个组只有一个NaN实例,它就会失败,因为dplyr将该组定义为lgl,而所有其他组都是dbl。 我的第一个(也是更一般的问题)是:当使用group_by()时,有没有一种方法告诉dpl

  • 类定义 特殊类定义 模块定义 方法定义 方法定义的嵌套 方法的计算 特殊方法定义 类方法的定义 调用限制 与定义有关的操作 alias undef defined? 类定义 例: class Foo < Super def test : end : end 语法: class 标识符 [`<' superclass ] 表达式.. end 语法:ruby 1.7

  • 问题内容: 我可以在类定义之外创建,甚至可以在另一个模块中创建吗? 问题答案: 是。您可以在类外部定义函数,然后在类主体中将其用作方法: 您也可以在定义一个函数后将其添加到类中: 您可以根据需要在不同的模块中定义函数和类,但是我建议不要在一个模块中定义该类,然后再将其导入另一个模块中并向其中动态添加方法(如第二个示例),因为那样的话d根据是否已导入另一个模块,其行为与类具有令人惊讶的不同。 我要指

  • homebody能帮我提示一下如何使用byte buddy 1.6.9重新定义静态方法吗? 我试过这个: 我遇到以下异常: 线程“main”java.lang.IllegalStateException中的异常:无法注入已经加载的类型:类委托。来源 谢谢