我試圖找到一種方法來使用閉包來重新聲明一個類。這是我到目前爲止:使用動態命名空間重新聲明類
我有兩個相同的簡單類,除了名稱空間。 test2.php中的名稱空間稱爲「bla」,在new.php中稱爲「newname」。除此之外,它們完全一樣。
namespace bla; //test2.php
class A
{
public function __construct()
{ }
public function bla()
{
echo '[A bla]';
}
}
include ("new.php");
include ("test2.php");
use newname\A as A; // <-- dynamic
$a = new A();
$a->bla();
所以這一段代碼簡單地從「new.php」類,而不是在「test2.php」類執行方法。這實際上是我需要的。但我的問題是代碼的最後一部分。通常我會一直使用的命名空間:
$a = new bla\A(); //Defined in 'test2.php'
$a->bla();
因爲聲明「爲使用」我要改變該行不過:
$a = new A(); //Defined in 'test2.php'
$a->bla();
因此,沒有的「一個命名空間盈() 」。
有沒有辦法保留「bla \ A()」命名空間(在test2.php中定義),但它仍然從「new.php」調用方法?
順便說一句,而不是擁有一切'use'它是一個封閉。閉包是匿名函數,它們共享來自外部範圍的變量。在這種情況下使用''將被稱爲別名或導入或沿着這些線:) – NikiC 2012-04-09 10:59:36
如果兩個類是相同的,那麼爲什麼你需要兩個類? DRY http://en.wikipedia.org/wiki/Don%27t_repeat_yourself – GordonM 2012-04-09 11:05:02