2013-11-23 158 views
0

我有兩個類寫在不同的PHP文件具有相同的名稱。我想一次加載一個。爲此我搜索了很多地方..我發現了這段代碼。我想任何人都可以詳細說明它在做什麼?我們可以在創建新對象時改變類名嗎?

$class= $this->controller.'Controller_'; 
$controller=new $class($this->registry); 

請解釋更多,如果你可以...

回答

0

您可以通過使用一個變量是指一類。因此,在這種情況下,類名使用值$this->controller和常量字符串'Controller_'放在一起。所以如果$this->controller'Foo',$ class變成'FooController_'。 第二行實例化此類的一個對象並將值傳遞給它的構造函數。

所以在結束時,這個代碼:

$controller = new FooController_($this->registry); 

的優點是,該「富」部分是可變的。因此,例如,您可以將url路徑映射到類,以便example.com/foofooController處理,example.com/barbarController處理。

所以這不是你想要的。這是加載不同名稱的不同類。

如果您有兩個具有相同名稱的類,則必須確保只加載要使用的類的文件。除非名稱空間不同,否則不能使用具有相同名稱的兩個類。所以如果你有兩個文件,foo1.php和foo2.php,每個文件都包含一個名爲foo的類,那麼你需要包含正確的文件。但我認爲這是糟糕的設計。通常,你不應該在相同名字的類之間進行選擇,除非在測試用例中,單元測試可以加載真實類的模擬版本。

相關問題