- 想请教下tp和laravel框架中命名空间的问题.
-
在学框架之前, 对命名空间的了解如下段代码:
<?php namespace china; class Person{} function show(){ echo "你好"; } const NAME = "zhangsan"; namespace usa; use china\Person; use function china\show; use const china\NAME; var_dump(new Person()); //object(china\Person)#1 (0) { } show(); //你好 echo NAME; //zhangsan //像命名空间的作用, 空间元素的3种访问方式有所了解, 但解释不了下面疑惑.
- 但是在php框架中
- 图一
- 图二
- 所以对框架中的namespace和use的用法感到很疑惑, 使用namespace和use时, 到底该从哪一级目录开始写起呢?
- 之前觉得是从目录的顶级写起, 像这样
namespace \vendor\laravel\framework\src\Illuminate\Http
. (C:UsersJINDesktoplaravel_project这里是复制文件夹路径时, 忘记删了这部分). 但是laravel框架是写成namespace Illuminate\Http
.- 所以感到非常纳闷, 有点无所适从, 究竟该怎么正确理解这个问题呢?? 有什么确切的规则吗?? 多谢了
- 看的视频课程, 命名空间课程里没讲到psr和自动加载这些. 项目框架视频里讲师 将命名空间当作基础知识, 默认大家都懂, 也没讲到命名空间.
namespace china;
class Person{}
你这样写,说明china 是你的根目录,下面有个 Person 文件。
图一
是框架里面的写法。
利用composer 定义根路径。你可以看下 http 这个目录下,有个composer.json 文件,里面有
"autoload": {
这边定义了根路径,会把根目录指向 Illuminate。所以可以这样写。下面的use 类似。
图2
你的项目下 有 composer.json 文件,定义这样:
"autoload": {
namespace 可以在项目里面定义多个根路径,相互不会影响。
namespace 是一种逻辑的文件路径写法,不像 这种:
C:UsersJINDesktoplaravel_projectvendorlaravelframeworksrcIlluminateHttp
物理的写法。
现在 namespace 和 composer 会结合使用,composer 都会用到 namespace,你可以看下 composer 的文档。