2012-10-31 226 views
3

原諒我,如果我的術語似乎不正確......(因爲它可能是)與觀察員的PHP對象組成?

說我使用的組成和我的上級對象是這樣的:

abstract child 
{ 
    /* array of Activity objects */ 
    public $activities; 

    abstract function punish() {} 
} 

favoriteChild extends child 
{ 
    function punish() { 
     // Have a talk 
    } 
} 

redHeadedStepChild extends child 
{ 
    function punish() { 
     // Beat with wrench 
    } 
} 

現在讓我們說$activities是由更多的對象組成,其中之一是StealingCookiesFromJar

如何從StealingCookiesFromJar對象內部調用具體子方法punish? (我對觀察者不熟悉......是我應該在這裏學習的嗎?)

+0

當你調用子類一樣,有時你在'$ this'傳遞和調用它的方法定義'$ invoker'。這樣'StealingCookiesFromTheJar'可以訪問調用類(在本例中爲'redHeadedStepChild')。然而,嚴格來說,如果你遵循觀察者模式,觀察班不應該需要這些信息。 –

回答

0

您需要一個StealingCookiesFromJar對象內的混凝土小孩。創建或將它傳遞到方法

class StealingCookiesFromJar{ 
    function doSomething(){ 
     $child = new redHeadedStepChild(); 
     $child->punish(); 
    } 
    } 

class StealingCookiesFromJar{ 
    function doSomething(redHeadedStepChild $child){ 
     $child->punish(); 
    } 
    }