2017-02-14 49 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