重新定义类方法或类

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

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\''

);

以上是 重新定义类方法或类 的全部内容, 来源链接: utcz.com/qa/405955.html

回到顶部