在编程的时候遇到这样一个关于命名空间的问题,先上代码:
立即学习“PHP免费学习笔记(深入)”;
Ke361是一个开源的淘宝客系统,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制, 融合了模块化、驱动化和插件化的设计理念于一体,以帮助想做淘宝客而技术水平不高的朋友。突破了传统淘宝客程序对自动采集商品收费的模式,该程序的自动 采集模块对于所有人开放,代码不加密,方便大家修改。集成淘点金组件,自动转换淘宝链接为淘宝客推广链接。K
namespace Test {
class Test {}
}
namespace Chou {
use Test\Test;
class Mee {
public $class = 'Test';
public function getClass()
{
return new $this->class();
}
}
$tmp = new Mee();
$tmp->getClass();
}我试图在getClass方法中通过变量动态实例化另一个命名空间的类,但是触发了“Class not found”错误。我觉得时$class变量的问题,所以又把测试代码简化了一下:
namespace Chou {
use Test\Test;
$test = 'Test';
$tmp = new $test();
}果然出现了和预期一样的错误。我知道可以通过完全限定的方式来解决,但是我仍然想明白这是什么原理,还望高手解惑。
是我自己疏忽了,在手册中找了命名空间和动态语言特征。
回复内容:
在编程的时候遇到这样一个关于命名空间的问题,先上代码:
立即学习“PHP免费学习笔记(深入)”;
namespace Test {
class Test {}
}
namespace Chou {
use Test\Test;
class Mee {
public $class = 'Test';
public function getClass()
{
return new $this->class();
}
}
$tmp = new Mee();
$tmp->getClass();
}我试图在getClass方法中通过变量动态实例化另一个命名空间的类,但是触发了“Class not found”错误。我觉得时$class变量的问题,所以又把测试代码简化了一下:
namespace Chou {
use Test\Test;
$test = 'Test';
$tmp = new $test();
}果然出现了和预期一样的错误。我知道可以通过完全限定的方式来解决,但是我仍然想明白这是什么原理,还望高手解惑。
是我自己疏忽了,在手册中找了命名空间和动态语言特征。
手册里有写,在变量中使用命名空间必须使用完全限定名称,规定如此。
http://php.net/manual/zh/language.nam...









