首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BackSlash(\),名称空间分隔符在PHP中的别名

BackSlash(\),名称空间分隔符在PHP中的别名
EN

Stack Overflow用户
提问于 2013-07-19 04:14:44
回答 2查看 1.3K关注 0票数 1

我一直在阅读PHP中的使用名称空间:别名/导入。有两件事我不明白。

上面写着,

请注意,对于名称空间名称(包含名称空间分隔符的完全限定名称空间名称,例如Foo\Bar,而不是不包含名称空间的全局名称,例如FooBar),前导反斜杠是不必要的,不建议使用,因为导入名称必须是完全限定的,并且不能相对于当前命名空间进行处理。

有谁能解释一下

  • 什么意思?
  • 使用名称空间别名的目的是什么?考虑到我知道使用命名空间的目的。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-19 04:38:33

您可能需要导入两个完全独立的名称空间,它们恰好具有相同的名称。例如,您可能需要从mysql中选择数据,然后插入到oracle中,并且您正在使用一些使用名称空间的数据库库。

代码语言:javascript
复制
use Database\Mysql\Connection;
use Database\Oracle\Connection;

$conn = new Connection(); //which one is it??

您可以跳过导入命名空间。

代码语言:javascript
复制
use Database\Mysql\Connection;
use Database\Oracle\Connection;

$conn = new Database\Mysql\Connection();

或者化名--至少其中一个

代码语言:javascript
复制
use Database\Mysql\Connection as MysqlConnection;
use Database\Oracle\Connection as OracleConnection;

$conn = new MysqlConnection();
票数 4
EN

Stack Overflow用户

发布于 2013-07-19 04:25:19

什么意思?

它真正的意思是它所说的,并显示在示例中。导入命名空间类时,应该省略第一个反斜杠:

代码语言:javascript
复制
use My\Full\Classname as Another;    // recommended
use \My\Full\Classname as Another;   // not recommended

原因是use期望有一个完全限定命名空间。不能使用相对路径。换句话说,如果您已经在My\命名空间中,则不能使用use Full\Classname

目的是什么?

实际上,这在第一章中是解释的:

在PHP世界中,命名空间旨在解决库和应用程序的作者在创建类或函数等可重用的代码元素时遇到的两个问题:

  • 您创建的代码与内部PHP类/函数/常量或第三方类/函数/常量之间的名称冲突。
  • 能够别名(或缩短) Extra_Long_Names设计来缓解第一个问题,提高源代码的可读性。

因此,目的是缩短和/或避免冲突,例如,当您有两个名为Foo的类,并且需要同时使用这两个类时,您必须有一个解决冲突的方法(至少如果您不想每次使用完全限定的名称):

代码语言:javascript
复制
use My\Very\Long\Namespaced\Class\Named\Foo as Foo;
use My\Other\Foo as OtherFoo;

然后你可以用

代码语言:javascript
复制
$foo = new Foo;
$otherFoo = new OtherFoo;

因此,这是简短和简单的,不冲突。它真的没有更多。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17738012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档