我一直在阅读PHP中的使用名称空间:别名/导入。有两件事我不明白。
上面写着,
请注意,对于名称空间名称(包含名称空间分隔符的完全限定名称空间名称,例如Foo\Bar,而不是不包含名称空间的全局名称,例如FooBar),前导反斜杠是不必要的,不建议使用,因为导入名称必须是完全限定的,并且不能相对于当前命名空间进行处理。
有谁能解释一下
发布于 2013-07-19 04:38:33
您可能需要导入两个完全独立的名称空间,它们恰好具有相同的名称。例如,您可能需要从mysql中选择数据,然后插入到oracle中,并且您正在使用一些使用名称空间的数据库库。
use Database\Mysql\Connection;
use Database\Oracle\Connection;
$conn = new Connection(); //which one is it??您可以跳过导入命名空间。
use Database\Mysql\Connection;
use Database\Oracle\Connection;
$conn = new Database\Mysql\Connection();或者化名--至少其中一个
use Database\Mysql\Connection as MysqlConnection;
use Database\Oracle\Connection as OracleConnection;
$conn = new MysqlConnection();发布于 2013-07-19 04:25:19
什么意思?
它真正的意思是它所说的,并显示在示例中。导入命名空间类时,应该省略第一个反斜杠:
use My\Full\Classname as Another; // recommended
use \My\Full\Classname as Another; // not recommended原因是use期望有一个完全限定命名空间。不能使用相对路径。换句话说,如果您已经在My\命名空间中,则不能使用use Full\Classname。
目的是什么?
实际上,这在第一章中是解释的:
在PHP世界中,命名空间旨在解决库和应用程序的作者在创建类或函数等可重用的代码元素时遇到的两个问题:
因此,目的是缩短和/或避免冲突,例如,当您有两个名为Foo的类,并且需要同时使用这两个类时,您必须有一个解决冲突的方法(至少如果您不想每次使用完全限定的名称):
use My\Very\Long\Namespaced\Class\Named\Foo as Foo;
use My\Other\Foo as OtherFoo;然后你可以用
$foo = new Foo;
$otherFoo = new OtherFoo;因此,这是简短和简单的,不冲突。它真的没有更多。
https://stackoverflow.com/questions/17738012
复制相似问题