-
由来:
-
为防止编程人员在项目中定义的类/函数/常量或第三方类/函数/常量之间出现重复冲突(也是价值之一),在PHP5.3中引入了命名空间这一概念。
-
命名空间,即将代码划分成不同空间,不同空间的类名相互独立,互不冲突
-
-
注意:
-
namespace
命名空间必须放在<?php
下一行,直接不能插入其他代码 -
命名空间只对类名、函数名、常量(const定义的)有效。
-
命名空间从始至终就是一个“内部伪概念”,只是用于解决类和变量的命名冲突,从来就跟实际文件结构没有半毛钱的关系。
-
-
价值:
-
为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
-
三种访问形式:(和相对路径与绝对路径相似)
-
非限定名称访问方式
-
限定名称访问方式
-
完全限定名称访问方式
<?php namespace app\get1 function getUser () { return $username1; } namespace get2 function getUser () { return $username2; } getUser(); // 非限定名称访问方式 \app\get1\getUser(); //完全限定名称访问方式,从根路径开始,类似绝对路径 app\get1\getUser(); //限定名称访问方式,不是从根路径开始,类似相对路径</pre>
-
使用绝对路径调用类时顶级命名空间标识(第一个 \ )不能省略。
class TinyRoute { public function foo() { return \TinyLara\TinyView\TinyView::fuck(); //此处第一个‘\’不能省略 } }
总结:
-
namespace 仅仅是符号注册! 和目录,文件没关系,具体引入文件需要依赖于 autoload。
-
补充autoload知识:当用户去实例化一个不存在的类/命名空间时,会触发用户已经注册的 autoload 函数,在此函数内可以进行字符串目录、文件拼接,最后require进来相应文件。此时 这个类就堂而皇之的存在了。So... 你 new 成功了。[https://lvwenhan.com/php/401.html]
-
命名空间的引入机制
-
空间的引入:关键字USE,注意:当移入空间后,必须要用限定名称访问方式访问引入空间里面的函数(或类、常量),不能使用非限定名称方式访问,这样会访问到当前命名空间下的函数(或类、常量)。
-
空间类元素的引入:关键字use。注意:只能引入类,然后可以使用非限定名称访问。
-
-
网友评论