gpt4 book ai didi

php - 重新定义类方法或类

转载 作者:IT王子 更新时间:2023-10-29 00:50:20 24 4
gpt4 key购买 nike

有没有什么方法可以在不使用典型继承的情况下重新定义一个类或它的一些方法?例如:

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';
}
}

这正是我的困境:我更新了一个第三方库,它破坏了我的代码。我不想直接修改库,因为 future 的更新可能会再次破坏代码。我正在寻找一种无缝方式来替换类方法。

我找到了 library说它可以做到,但我很谨慎,因为它已经 4 岁了。

编辑:

我应该澄清一下,由于框架限制,我无法将类从 third_party_library 重命名为 magical_third_party_library 或其他任何名称。

出于我的目的,是否可以只在类中添加一个函数?我认为您可以在 C# 中使用称为“部分类”的东西来做到这一点。

最佳答案

它叫做 monkey patching .但是,PHP 没有对它的原生支持。

虽然,正如其他人也指出的那样,runkit library可用于添加对语言的支持,是 classkit 的继承者.而且,虽然它似乎是 abandoned由其创建者(已声明它与 PHP 5.2 及更高版本不兼容),该项目现在似乎有一个 new home and maintainer .

我还是 can't say I'm a fan其方法。在我看来,通过评估代码字符串来进行修改总是有潜在危险且难以调试。

仍然,runkit_method_redefine似乎是您正在寻找的东西,它的使用示例可以在 /tests/runkit_method_redefine.phpt 中找到。在存储库中:

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

关于php - 重新定义类方法或类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/137006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com