私はクロージャを使ってクラスを再宣言する方法を見つけようとしています。これは今まで私が持っていたものです:動的ネームスペースを持つクラスの再宣言
私は、名前空間を除いて同じ2つの単純なクラスを持っています。 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();
ように、コードのこの部分は、単に「test2.php」に「new.php」クラスの代わりにクラスからメソッドを実行します。これは実際に私が必要なものです。しかし、私の問題はコードの最後の部分です。私はその行を変更する必要が声明「として使用」
$a = new bla\A(); //Defined in 'test2.php'
$a->bla();
しかし、理由の:「A(のインフロント名前空間なしだから、
$a = new A(); //Defined in 'test2.php'
$a->bla();
)通常、私は、名前空間を使用しただろう"
"bla \ A()"名前空間(test2.phpで定義されています)を保持する方法はありますか?それでも "new.php"からメソッドを呼び出していますか?この場合
ところで、それに 'use'を持っていないすべてが閉鎖されます。クロージャーは、外部スコープから変数を共有する無名関数です。この場合の 'use'はエイリアスまたはインポートと呼ばれ、これらの行に沿って何かと呼ばれます:) – NikiC
2つのクラスが同じ場合、なぜ2つのクラスが必要ですか? DRY http://en.wikipedia.org/wiki/Don%27t_repeat_yourself – GordonM