为什么 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. 自动加载功能 – 这样我们就可以知道在哪里可以找到特定的 class。

至于#1 – 我对此不感兴趣。至于#2——我想简化事情并创建一个“App”命名空间,然后是“models”、“controllers”等。

可以吗,还是我遗漏了什么?对一切都使用名称空间还有其他好处吗?

命名空间的主要原因是为了避免命名冲突。例如,在我目前正在开发的应用程序中,我有四个 Process classes - 我的一个和 Composer 依赖项中的三个。由于使用 Zend 方法 (Library_Name_Class_Name) 很笨拙,命名空间有助于指定您要使用的 class。这也意味着您可以将您的库命名为 classes,而不必担心与其他库发生冲突。

正如您所说,帮助自动加载器了解 classes 的存储位置也是一个好处。但是,这也可以使用带下划线的命名约定。

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