2012-01-10 19 views
5

Esto es en realidad proviene de un problema específico de WordPress, pero hay un punto PHP más general detrás del cual estoy interesado en saber la respuesta.¿Es posible reemplazar una función dentro de una clase PHP?

clase El WordPress es a lo largo de estas líneas:

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

¿Hay alguna manera en PHP que puedo reemplazar example_function() desde fuera de la clase?

La razón por la que quiero hacer esto es que la clase es del complemento WP de otra persona (y tiene varias funciones en la clase) y quiero seguir recibiendo actualizaciones para el complemento, pero quiero adaptar una de las funciones. Si cambio el complemento, perderé todos mis propios cambios cada vez. ASÍ QUE si tengo mi propio complemento que solo cambia esa función, evito el problema.

+0

Puede establecer la clase original como un resumen y configurar ese metodo d como un método abstracto? –

+0

de búsqueda: http://stackoverflow.com/questions/2994758/function-overloading-and-overriding-in-php –

+0

Declarar abstracta sólo va a evitar que la clase original de ser utilizados directamente y todavía tendrá que edítalo cada vez. – Narf

Respuesta

9

Parece que lo que quiere hacer es extend la clase y anula esa función en particular.

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

Perfecto, gracias – user114671

1

Usted podría probablemente tener un include_once al complemento de destino en la parte superior de su archivo y luego extender la clase del objetivo del plugin en lugar de la clase WP_Widget:

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

Mientras el método en la clase existente no se ha marcado como final, puede simplemente subclase y anularlo

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