Можно ли заменить функцию в классе PHP? - PullRequest
5 голосов
/ 10 января 2012

Это на самом деле происходит от конкретной проблемы WordPress, но за ней стоит более общая точка PHP, на которую мне интересно узнать ответ.

Класс WordPress выглядит следующим образом:

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

Есть ли в PHP какой-либо способ, которым я могу заменить example_function() вне класса?я хочу сделать это, чтобы класс был от чьего-либо WP-плагина (и имеет несколько функций в классе), и я хочу продолжать получать обновления для плагина, но я хочу, чтобы одна из функций была адаптированаЕсли я изменю плагин, то каждый раз буду терять все свои изменения.Поэтому, если у меня есть свой собственный плагин, который просто меняет эту функцию, я избегаю проблемы.

Ответы [ 3 ]

9 голосов
/ 10 января 2012

Похоже, что вы хотите сделать 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 голос
/ 10 января 2012

Пока метод в существующем классе не помечен как финальный, вы можете просто создать подкласс и переопределить его

class My_Tribe_Image_Widget extends Tribe_Image_Widget {
    //override this method
    function example_function(){
        // do something useful
    }
}
1 голос
/ 10 января 2012

Вы можете , вероятно, иметь include_once для целевого плагина в верхней части вашего файла, а затем расширить класс целевого плагина вместо класса WP_Widget:

include_once otherPlugin.php
class My_Awesome_Plugin_Overloaded extends Someone_Elses_Awesome_Plugin{
    function example_function(){
         return 'woot';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...