네임스페이스는 범위 액세스 방법을 사용합니다
*
네임스페이스
넓게 말하면 네임스페이스는 사물을 캡슐화하는 방법입니다. 이 추상화는 여러 곳에서 찾을 수 있습니다. 예를 들어, 운영 체제에서는 디렉터리가 관련 파일을 그룹화하는 데 사용됩니다.
는 디렉터리에 있는 파일에 대한 네임스페이스 역할을 합니다. 예를 들어, foo.txt 파일은 /home/greg 및 /home/other 디렉토리에 동시에 존재할 수 있지만 두 개의 foo.txt는 동일한 디렉토리 문서에 존재할 수 없습니다. 또한 /home/greg 디렉터리 외부에서 foo.txt 파일에 액세스할 때 /home/greg/foo를 가져오려면 파일 이름 앞에 디렉터리 이름과 디렉터리
를 넣어야 합니다. .txt. 이 원칙을 프로그래밍 분야에 적용한 것이 네임스페이스의 개념입니다.
http://php.net/manual/zh/언어.namespaces.php
*
ThinkPHP5는 클래스 라이브러리 파일을 정의하고 자동으로 로드하는 네임스페이스 방식을 채택하여 여러 모듈과 Composer 클래스 라이브러리 간의 네임스페이스 충돌 문제를 효과적으로 해결하고 더 많은
클래스 라이브러리의 효율적인 자동 로딩 메커니즘.
http://www.kancloud.cn/manual/thinkphp5/118014
*
함수는
네임스페이스에 적용됩니다. const는
네임스페이스에 적용됩니다. 클래스는
네임스페이스에 적용됩니다. 정의는
*
액세스 방법:
에 적용할 수 없습니다. 1 , 정규화되지 않은 이름 액세스 방법
2. 정규화된 이름 액세스 방법
3. 정규화된 이름 액세스 방법(상대 경로)
<?php /** * 命名空间 使用范围 访问方式 * * 命名空间 * 从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组, * 对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中 * 存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目 * 录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。 * //m.sbmmt.com/ * * ThinkPHP5采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲突问题,并且实现了更加 * 高效的类库自动加载机制。 * //m.sbmmt.com/ * * function 适用于命名空间 * const 适用于命名空间 * class 适用于命名空间 * define 不适用于命名空间 * * 访问方式: * 1、非限定名称访问方式 * 2、完全限定名称访问方式 * 3、限定名称访问方式(相对路径) */ /** * kj1,命名空间1 */ namespace kj1; function getmsg(){ echo '123<br>'; } //define('MN','iwanghang'); const MN="iwanghang<br>"; class Animals{ public $obj='cat<br>'; } /** * kj2,命名空间2 */ namespace kj2; use kj1\Animals; function getmsg(){ echo '456<br>'; } //define('MN','iwanghang0'); const MN="iwanghang0<br>"; /** * 访问方式:1、非限定名称访问方式 */ getmsg(); /** * 访问方式:2、完全限定名称访问方式 */ \kj1\getmsg(); \kj2\getmsg(); echo \kj1\MN; $animal = new Animals(); echo $animal->obj; /** * 访问方式:3、限定名称访问方式 */ //echo kj1\getmsg(); // 会报错,function kj2\kj1\getmsg() 找不到这个函数 /** * 访问方式:3、限定名称访问方式 */ namespace kj3; echo kj4\getmsg(); // 打印结果:789 namespace kj3\kj4; function getmsg(){ echo '789<br>'; }