2011-04-20 80 views
0

在我的項目中,我所有的視圖類都是基本視圖類的擴展,它處理視圖的所有常見方面,包括錯誤消息。在其中一個視圖擴展中,我創建了另一個可能需要輸出錯誤消息的'helper'類的實例。如何從實例化類調用父方法?

有沒有什麼辦法可以從創建helper類實例的類的父類引用我的addError方法,直接從helper類自身的方法中?

例如

 
class baseview { 
    ... 
    public function addError($message) { 
     ... 
    } 
    ... 
} 

class pageview extends baseview { 
    ... 
    $helper = new helper(); 
    ... 
} 

class helper { 
    ... 
    public function myFunction($var) { 
     if($var) { ... } 
     else { theClassThatInstantiatedMe::addError('Error Message') } 
    } 
    ... 
} 

〜或者〜

可能有人請提出一個更好的方法來組織我的系統,以更好地處理這種情況?

回答

2

2個簡單的解決方案是:

Store中的輔助類的父類:

class pageview extends baseview { 
    ... 
    $helper = new helper($this); 
    ... 
} 

class helper { 
    function __construct($parent) 
    { 
     $this->_parent=$parent; 
    } 
    ... 
    $this->_parent->addError("..."); 
} 

Othwerwise使addError功能的公共和靜態的,所以你可以在輔助類調用它沒有商店父類實例:

class baseview { 
    ... 
    static public function addError($message) { 
     ... 
    } 
    ... 
} 

class helper{ 
    ... 
    baseview::addError("..."); 
} 
+0

我喜歡你的第二個建議的整潔,所以我已經走了這一點。我知道必須有一個簡單明瞭的方法才能做到這一點,非常感謝你! – Chris 2011-04-20 14:46:47

+0

大家好!實際上,使用'static'意味着我不能使用'$ this-> var'來訪問類變量,我需要這樣做,以便基類(以及隨後的子類)「知道」何時出現錯誤消息顯示!所以我已經轉向你的第一個例子,一切都很好! – Chris 2011-04-20 15:10:24

0

從你的例子中,我會假設你的意思是baseview被普遍使用,所以「baseview :: addErro r('錯誤信息');「

但是從文中可以看出,可能存在不同的類別。在這種情況下,你將不得不在創建類的引用傳遞到幫手,就像這樣:

class pageview extends baseview { 
... 
$helper = new helper($this); 

... }

類助手{ 保護創作者$; ... 公共職能myFunction的($創造者,是$ var){

$this->creator = $creator; 
    if($var) { ... } 
    else { $creator->addError('Error Message') } 
} 
... 

}

0

如果你想要乾淨的代碼,你應該分開佈線(對象的創建)和邏輯。

這裏是 PDF所有程序員都應該至少讀一次:Writing Testable Code

這是MISKO Hevery的博客(阿谷歌「乾淨代碼」傳道者)發現了一個PDF文件。

如果你喜歡的視頻,您可以檢查這些:Misko's conferences at Google

相關問題