2017-02-14 116 views
-1

有没有办法在不触及类编码的情况下重写类内部的函数?PHP Override外部类功能

我们有课,让我们说这是位于foo.php

class WPSEO_Frontend { 
     public function head() { 
      echo '<!--/', $this->head_product_name(), ". -->\n\n"; 
      return; 
     } 
} 

所以无需修改上面这个类,是有办法消除这种echo从类外,像(我知道下面的例子是行不通的)

bar.php

class WPSEO_Frontend overrides head { 
     echo ''; 
     return; 
} 
+0

你没有扩展能力该类重写公共方法,例如,如果无法以任何方式修改调用代码以使用不同的类? –

+0

@MichaelBerkowski抱歉,我不了解你的问题 – Mitch

+0

我的意思是,在PHP(和其他许多langs)中处理这个问题的正常方法是创建一个类,比如'class WPSEO_Frontend_Subclass extends WPSEO_Frontend {}',并重新定义方法那里。但是,如果您无法访问调用“新WPSEO_Frontend()”的代码以替代您的子类,那将无济于事。 –

回答

0

例如,PHP不支持Swift语言等运行时函数。

你应该尝试做的是改为创建一个“WPSEO_Frontend_Base”类,然后创建另一个“WP_SEO_Frontend”子类,该子类继承自它,覆盖head()函数。

下面是一些示例代码:

wpseo.frontend.base.php

class WPSEO_Frontend_Base { 
     public function head() { 
      echo '<!--/', $this->head_product_name(), ". -->\n\n"; 
      return; 
     } 
} 

wpseo.frontend.php

require 'wpseo.frontend.base.php'; 

class WPSEO_Frontend extends WPSEO_Frontend_Base { 
    function head(){ 
    // Override head() here 
    } 
} 
+1

*“功能搅拌”*是新颖的[*猴补丁*](https://en.wikipedia.org/wiki/Monkey_patch)方式? – naomik

+0

是的,似乎是这样。 – ablopez

+0

这有助于。谢谢! – Mitch