2012-01-10 31 views
5

これは実際には特定のWordPressの問題に由来していますが、その背後にはより一般的なPHPのポイントがあります。PHPクラス内の関数を置き換えることはできますか?

WordPressのクラスでは、これらの線に沿っている:

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

は、私はクラスの外からexample_function()を置き換えることができますPHPのいずれかの方法はありますか?

これは、クラスが他の人のWPプラグイン(クラス内にいくつかの機能があります)からのもので、私はプラグインの更新を引き続き受けたいと考えています。私がプラグインを変更すると、毎回私自身の変更がすべて失われます。だから私は自分のプラグインが1つだけ機能を変更する場合、私は問題を避ける。

+0

元のクラスを抽象として設定し、抽象メソッドとしてd? –

+0

検索: http://stackoverflow.com/questions/2994758/function-overloading-and-overriding-in-php –

+0

だけで直接使用されてから元のクラスを防ぐことができます抽象を宣言し、彼はまだする必要があります毎回編集してください。 – Narf

答えて

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

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 
    } 
} 
関連する問題