2012-01-10 44 views
5

這實際上來自於一個特定的WordPress問題,但它背後有一個更一般的PHP點,我很想知道答案。是否可以替換PHP類中的函數?

WordPress的類是沿着這些線路:

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

是否有任何PHP的方式,我可以從外部類取代example_function()

我想這樣做的原因是該類是從別人的WP插件(並在類中有幾個功能),我想繼續接收插件的更新,但我希望其中一個功能適應。如果我更換插件,那麼每次都會丟失所有我自己的更改。所以,如果我有我自己的插件,它只是改變了一個功能,我避免這個問題。

+0

您可以設置原始類作爲一個抽象的,並設置其實現方法具d作爲抽象方法? – 2012-01-10 16:27:43

+0

查找: http://stackoverflow.com/questions/2994758/function-overloading-and-overriding-in-php – 2012-01-10 16:28:08

+0

聲明抽象只會阻止直接使用原始的類,他還是能每次編輯它。 – Narf 2012-01-10 16:30:11

回答

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 
    } 
} 
+0

完美,謝謝 – user114671 2012-01-10 16:42:40

1

你可以可能有include_once到目標插件在你的文件的頂部,然後擴展的類的對象插件,而不是WP_Widget類:只要

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

在現有的類中的方法還沒有被標記爲final,你可以繼承和覆蓋它

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