是否可以替换PHP类中的函数?

时间:2012-01-10 16:25:21

标签: php wordpress class function

这实际上来自一个特定的WordPress问题,但它背后有一个更普遍的PHP点,我有兴趣知道答案。

WordPress类就是这样的:

class Tribe_Image_Widget extends WP_Widget {
    function example_function(){
        // do something useful
    }
}

在PHP中有什么方法可以从类外部替换example_function()吗?

我想这样做的原因是该类来自其他人的WP插件(并且在该类中有几个函数),我想继续接收插件的更新,但我希望其中一个功能适应。如果我更改插件,那么每次我都会丢失所有更改。所以,如果我有自己的插件,只是改变了一个功能,我就避免了这个问题。

3 个答案:

答案 0 :(得分:9)

听起来你想做的就是extend这个类,并覆盖那个特定的函数。

Class Your_Tribe_Image_Widget extends Tribe_Image_Widget
{
   function example_function() {
     // Call the base class functionality
     // If necessary...
     parent::example_function();

     // Do something else useful
   }
}

答案 1 :(得分:1)

你可能可能在文件顶部有一个include_once到目标插件,然后扩展目标插件的类而不是WP_Widget类:

include_once otherPlugin.php
class My_Awesome_Plugin_Overloaded extends Someone_Elses_Awesome_Plugin{
    function example_function(){
         return 'woot';
    }
}

答案 2 :(得分:1)

只要现有类中的方法没有被标记为final,您就可以将其子类化并覆盖它

class My_Tribe_Image_Widget extends Tribe_Image_Widget {
    //override this method
    function example_function(){
        // do something useful
    }
}