Это на самом деле происходит из конкретной проблемы WordPress, но есть более общий PHP-элемент, за который мне интересно узнать ответ.
Класс WordPress выполняется следующим образом:
class Tribe_Image_Widget extends WP_Widget { function example_function(){ // do something useful } }
Есть ли способ PHP в том, что я могу заменить example_function()
извне класса?
Причина, по которой я хочу сделать это, состоит в том, что класс принадлежит другому плагину WP (и имеет несколько функций в классе), и я хочу продолжать получать обновления плагина, но хочу, чтобы одна из функций была адаптирована. Если я изменю плагин, я каждый раз потеряю все свои собственные изменения. SO, если у меня есть свой собственный плагин, который просто меняет одну функцию, я избегаю этой проблемы.
Похоже, что вы хотите 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 } }
Вероятно , вы можете включить include_once в целевой плагин в верхней части вашего файла, а затем расширить класс целевого плагина вместо класса WP_Widget:
include_once otherPlugin.php class My_Awesome_Plugin_Overloaded extends Someone_Elses_Awesome_Plugin{ function example_function(){ return 'woot'; } }
Пока метод в существующем классе не был помечен как окончательный, вы можете просто подклассы и переопределить его
class My_Tribe_Image_Widget extends Tribe_Image_Widget { //override this method function example_function(){ // do something useful } }