您可能会遇到需要修改类或其方法而没有典型继承选项的情况。以下面的类为例:
class third_party_library { function buggy_function() { return 'bad result'; } function other_functions(){ return 'blah'; } }
您可能希望用更理想的实现替换 buggy_function() 方法,但通过继承来这样做是不可行的。 PHP 本身不支持猴子修补,这允许您在定义类后对其进行修改。
一个潜在的解决方案是使用 PECL runkit 库,它提供了 runkit_method_redefine() 函数。这允许您通过评估代码字符串来修改方法:
runkit_method_redefine('third_party_library', 'buggy_function', '', 'return \'good result\'' );
但是,这种方法有缺点。通过字符串求值修改代码可能很危险,并且调试可能具有挑战性。
另一种选择是考虑向类添加函数,而不是修改现有函数。在某些语言中,例如 C#,可以使用“部分类”。但是,请务必注意,由于您的特定情况下的框架限制,这可能不可行。
以上是PHP 中可以不继承地修改类方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!