【问题标题】:Is it possible to replace a function within a PHP class?是否可以替换 PHP 类中的函数?
【发布时间】:2012-01-10 16:25:20
【问题描述】:

这实际上来自一个特定的 WordPress 问题,但它背后有一个更一般的 PHP 点,我很想知道答案。

WordPress 类是这样的:

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

在 PHP 中有什么方法可以让我在课堂外替换 example_function()

我想这样做的原因是该类来自其他人的 WP 插件(并且在该类中有几个函数),我想继续接收插件的更新,但我想要调整其中的一个函数。如果我更改插件,那么我每次都会丢失我自己的所有更改。所以如果我有自己的插件,只是改变了一个功能,我就避免了这个问题。

【问题讨论】:

  • 您可以将原始类设置为抽象,然后将该方法设置为抽象方法?
  • 声明抽象只会阻止原始类被直接使用,他仍然必须每次都对其进行编辑。

标签: php wordpress class function


【解决方案1】:

听起来您想做的是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
   }
}

【讨论】:

  • 如果您要覆盖的函数是私有函数怎么办?
【解决方案2】:

您可以可能在文件顶部有一个包含目标插件的 include_once,然后扩展目标插件的类而不是 WP_Widget 类:

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

【讨论】:

    【解决方案3】:

    只要现有类中的方法没有被标记为final,你就可以子类化并覆盖它

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

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2021-08-31
      • 2011-04-06
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多