PHP 命名空间使用--规约探索

探索一:namespace 有无的区别:

假设:在一个Application.php 中定义一个class Application, 且申明命名空间,如下:

 

然后在测试文件中使用它:

 

 

然后就报错了,报错的大概意思就是并没有在测试文件中找到该类

 

呃?!!! 为啥,我明明引用了Application.php啊~

 

侦探分析时刻:

首先是官方文档解释:

PHP 命名空间使用--规约探索_第1张图片

 

首先需要认清命名空间的作用,就是给文件的属性上添加一个在逻辑上(php中)的位置路径,而不限于物理路径上,而demo中为什么报错,是因为Application.php中已经声明了命名空间,那么就需要按照就要使用其给定的逻辑路径去访问class Application了,而不再是简单的new Application,当然访问的前提还是需要引入该文件,不同的是,需要使用类(这里是特指类,还包括方法、常量等也可以)的逻辑路径去使用它。

那么如何修改bug呢?方法有三:

一:

在demo文件中,声明命名空间,且需要class Application所 声明的命名空间相同,在同一个逻辑路径下,就可以通过相对逻辑路径进行对class Application的访问了,如下:

 

 

 

二:

使用use,申明要使用文件的逻辑路径;

 

 

 

三:

使用逻辑路径去调用类

 

那么针对,如果我不use文件完整的逻辑路径,而只是use逻辑路径的相当于目录部分的路劲,又会怎么样?

即:

 

 

php似乎还不支持的,

以下是关于use的介绍:

 

PHP 命名空间使用--规约探索_第2张图片

 

对于我们在demo中调用的class Application,其完整的逻辑路径又是如何?

有下面三种情况

 

 

使用OK,Application完整的逻辑路径应该为\app\Application,为什么呢?再看。

 

 

这两种都没有报错,因为Application完整的逻辑路径确实为\app\Application,那么为什么第一种情况也可以呢,因为demo中并没有声明命名空间,默认为'\',第一种情况可以解释为在demo所在的命名空间下利用相对逻辑路径调用Application,所以Application完整的逻辑路径确实为\app\Application,

因此这种情况就会报错:

 

 

因为此时Application的完整逻辑路径成为了 \web\app\Application

 

官方解释如下:

 

PHP 命名空间使用--规约探索_第3张图片

故:在使用命名空间的时候,需要注意引用脚本的命名空间和被引用脚本的命名空间,从而使用先对逻辑路径或者绝对路径

 

你可能感兴趣的:(php)