2016-11-05 54 views
3

想我打電話與parent::__construct();父類的子類我的我。怎麼可以檢測父類是否已被調用,子類的父類檢測子類是否有一個叫父類

+0

一個'私人static'僅從父「的構造函數訪問的變量?它不會被訪問或重寫,因爲它是'私人' –

+0

我想你想看看[debug_backtrace](http://php.net/debug_backtrace)。 Afaik是「檢測」函數/方法調用來自何處的唯一方法。 – icecub

+1

如果你解釋爲什麼你需要這樣做,這可能會有所幫助。沒有解釋,這聽起來有點像你的建模可能有點關閉,如果你需要這樣做,但肯定有一個很好的理由。 –

回答

-1

我不知道如果我明白你的問題,但我的建議是設置一個靜態變量的true,在我的情況$CHILD,在兒童類然後在父類使用get_called_class然後測試上述靜態變量。

class Base { 

    public function __construct() { 
     $child = get_called_class(); 
     if($child::$CHILD) 
     { 
      echo "Parent has being called"; 
     } 
    } 
} 

class Child extends Base { 

    public static $CHILD = true; 

    public function __constructor() 
    { 
     parent::__constructor(); 
    } 
} 

$child = new Child(); 

另一種方法是使用debug_backtrace作爲@icecub建議

+0

這回答了這個問題,但它是非常嚴酷的代碼/設計。基礎班不應該關心自己是否延期或延期。你確定你想鼓勵像這樣的練習嗎?更好的方法是從OP中挑出更多的東西,這樣我們就能理解他們爲什麼認爲他們有這個要求。在此基礎上下調。 –

+0

爲什麼或者什麼人問我想要做的答案與我無關,也不應該是你的。這是問答論壇,而不是tuturial網站。順便說一句,這個人問我似乎並不是一個新手。下次只需回答問題,然後提供建議。 @AdamCameron – KBJ

+1

沒有必要得到snippy傢伙。我認爲OP def *是一個OO熟練工,如果他們問這樣一個問題。也許不是,但這就是它看起來如此*的問題。有時候 - 通常甚至當有人提出問題時,他們並不是在問他們想問的問題,而是需要一些努力來澄清這一點。最終,我們在這裏*幫助人們*,而不是盲目地「回答問題,因爲它是一個問答網站」,並且有時幫助他們有時意味着來回頭一次。 –

相關問題