Laravel 4 系列入门教程(二) 命名空间的问题?

AuthController.php 文件中
namespace App\Controllers\Admin;

use Auth, BaseController, Form, Input, Redirect, Sentry, View;

命名空间引用 App\Controllers\Admin 这个路径,

使用了这些类:

{{{
Auth, BaseController, Form, Input, Redirect, Sentry, View

}}}

##疑问##

但是 App\Controllers\Admin 路径下不是就是只有 AuthController.php 这一个文件吗?
这些类:
Auth, BaseController, Form, Input, Redirect, Sentry, View

应该不在这个文件里面呀。

是不是我理解错了?
Auth, BaseController, Form, Input, Redirect, Sentry, View
是不是这些类并不是通过:
namespace App\Controllers\Admin;
来引用的?
已邀请:

ssoor

赞同来自: hillw4h

namespace 是声明当前文件代码的作用域,不是引用的作用域.
use 代表的是使用那些命名空间底下的那些类.

use BaseController #说明是根命名空间的 BaseControlle.

实际上等同于

use /BaseController

JohnLui

赞同来自: hillw4h

命名空间看来是很多人的短板呀,有机会我写一篇文章详细讲解一下~

解决你的疑问,我简单说几点:
  1. 命名空间类似 *UNIX 系统中的 文件目录。
  2. 同一目录下,可以直接相互调用。
  3. Auth, BaseController, Form, Input, Redirect, Sentry, View 这些系统组件的命名空间是 \ (顶级命名空间),AuthController 的命名空间是App\Controllers\Admin,可以看成他们在两个不同的文件夹中。
  4. 系统默认已经把 app/controllers app/models 等几个文件夹设置成了顶级命名空间,所以如果不使用App\Controllers\Admin 这样的命名空间的话,任何一个 Controller 都可以直接调用任何一个 Model ,不需要在前面 use。
  5. use 其实是一种“软链接导入”操作,相当于放了个标示符,让这个文件夹下的程序可以直接找到别的文件夹下的文件。
  6. 任何地方都可以直接使用绝对路径访问任何一个类,如: \View \Auth \App\Controllers\Admin\AuthController 等等,不用担心当前命名空间是哪里,开头的 \ 不省略即可。

ifunction

赞同来自:

看过一篇文章里面说用use引用顶级命名空间必须要加"\",不能省略,可这里没有加,是可以省略的?

要回复问题请先登录注册