我试图找到一种方法来使用闭包来重新声明一个类。这是我到目前为止:使用动态命名空间重新声明类
我有两个相同的简单类,除了名称空间。 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