为什么Yii框架中有这么多名称空间


Why are there so many namespaces in the Yii framework?

我想创建自己的简单框架。我已经知道Codeigniter,现在我决定看看Yii框架,它在过去几年里变得非常流行。

我理解PHP名称空间是如何工作的,但我惊讶地发现,在这个框架中,几乎所有东西都在不同的名称空间中。例如,SiteController.php如下所示:

namespace app'controllers;
use Yii;
use yii'filters'AccessControl;
use yii'web'Controller;
use yii'filters'VerbFilter;
use app'models'LoginForm;
use app'models'ContactForm;

我认为这可能有两个原因:

  1. 使用"composer"软件将东西安装在正确的位置
  2. 自动加载功能-这样我们就可以知道在哪里可以找到特定的类

至于#1——我对此不感兴趣。至于#2——我想简化事情,创建一个"应用程序"名称空间,然后创建"模型"、"控制器"等。

可以吗,还是我错过了什么?对所有事物都使用名称空间还有其他好处吗?

名称空间的主要原因是避免命名冲突。例如,在我目前正在开发的应用程序中,我有四个Process类——其中一个是我的,三个是Composer依赖项。由于使用Zend方法(Library_Name_Class_Name)非常困难,因此名称空间有助于指定要使用的类。这也意味着您可以命名库类,而不必担心与其他库发生冲突。

正如您所说,帮助自动加载器知道类存储在哪里也是一个好处。然而,使用带下划线的命名约定也是可能的。

一旦你开始使用名称空间,你就会发现它们有多有用,而且你不想回到PHP 5.2!由于新项目应该是为不早于5.4版本的PHP编写的(在编写时),您可以立即开始使用名称空间。