【问题标题】:Namespace the real meaning命名空间的真正含义
【发布时间】:2013-08-13 12:06:40
【问题描述】:

我已经阅读了有关命名空间的内容,并且我刚刚对它们进行了一些尝试。但我想确保我做对了。

1) 所以命名空间在这里是为了保存名称的重复,例如,当您将来自外部的源添加到应用程序中时非常好

2) 使用命名空间是否是一种好习惯,以避免重复

3) 使用像文件夹结构这样的命名空间是一种好习惯吗,例如,如果我有 Folder/Folder1/Fileone.php 像这样调用我的命名空间:namespace Zend/Folder1/Fileone;

我只是想确保我做对了,命名空间基本上在这里保持井井有条,并且知道使用它们很好。

【问题讨论】:

  • 我建议先玩一下 Python,以便深入了解命名空间。
  • @IgnacioVazquez-Abrams 在这里玩 python 毫无意义。在 Uffo,是的,你的假设是正确的

标签: php namespaces


【解决方案1】:
  1. 确切地说,命名空间确保声明相同类的两个库/代码库/项目之间没有冲突。在一个应用程序中分离不同的类甚至是有用的,这些类在逻辑上可能被赋予相同的名称;说View\UserModel\User

    您可以通过将类命名为class View_User 等来获得相同的好处,但这意味着您总是必须使用该名称来使用该类。看看一些更大的项目,比如 Zend Framework 1.0,看看这会导致多么冗长的混乱。使用命名空间,您可以在同一命名空间中使用更短的名称,并且可以轻松地使用别名类来缩短名称。

  2. 是的,最好使用ProjectName\... 甚至VendorName\ProjectName\... 为所有代码命名,以确保避免与第三方代码发生冲突。

  3. 是的,如果您将文件夹名称与类名称(包括命名空间)相关联,则使用自动加载器很容易。这也很有意义。

【讨论】:

  • "....使用命名空间,您可以在同一命名空间中使用更短的名称,并使用别名类轻松地缩短名称。"你的意思是例如 Zend\Model\Abstract\Inherit 做类似的事情:使用 Zend\Model\Abstract\Inherit as Zend\M\I ?
  • 是的,尽管... as Zend\M\I 碰巧不起作用。不过,您可以执行... as IModel 之类的操作。
  • @deceze 虽然他可以命名像IModel 这样的东西,但这是完全错误的。 MVC中没有Model,但是Services
  • @Dave 这不是重点。是的,我知道 MVC 中的“模型”是什么。不,这不是讨论它的重点。
猜你喜欢
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多