@Pascal MARTIN: 是的,在正常應用中可能不需要。但有時它可能會有用。 從我自己的應用程序中考慮一個示例:
有一個Controller子類可以使用Template對象來準備其輸出。每個模板都有一個名稱來引用它。當控制器需要一個模板時,它會通過將該名稱作爲參數向TemplateManager進行詢問。 但是,對於不同的控制器,可能會有許多具有該名稱的模板文件。控制者被用作插件,並且可以由不同的用戶編寫,所以他們使用的名稱不能被控制爲不相互衝突。模板的命名空間是必需的。 因此,模板對象的工廠TemplateManager需要模板名稱和名稱空間名稱來查找適當的模板源文件。該名稱空間與特定Controller的類名相關。
但是,在大多數情況下,每個控制器將使用來自其自己命名空間的模板,並且僅在極少數情況下使用來自其他命名空間的模板。因此,每次對TemplateManager :: getTemplate()的每個調用中指定名稱空間將會是一團糟。如果命名空間是可選的,並且默認爲... 調用TemplateManager :: getTemplate()的Controller!這裏是瞭解來電者的好地方。
當然,調用者控制器可以將自身或其名稱作爲參數傳遞,但與傳遞名稱空間名稱並無太大差別。無論如何,它都不是可選的。
但是,如果您可以知道調用者,則可以使用該信息在getTemplate()中自動默認命名空間,而不會影響調用者。它不必知道getTemplate()如何在其內部處理它,它如何知道正確的默認名稱空間。他只需要知道它的確如此,並且可以根據需要傳遞任何其他名稱空間。
工作例子總是很好。 +1。 :) – Randolpho 2009-07-31 18:21:58
謝謝;-)(他們也是沒有得到第一個答案^^的原因,但至少,我也有一點樂趣,這樣;-)) – 2009-07-31 18:22:54
謝謝你的例子。 是的,我同意在某種程度上,方法不需要知道,但我有一些其他人在我正在編寫的內容上編寫代碼,我想讓他們的生活更輕鬆,他。 我認爲使用調試有點冒失,但是謝謝你,你已經給了我一個很好的洞察調試功能,id以前從未真正做過的事情。 – Botto 2009-07-31 18:36:29