欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php中命名空间namespace和use

程序员文章站 2022-10-25 23:46:40
对于面向对象编程而言,命名空间namespace和use的概念非常重要. 1.根命名空间是反斜线 \ ,有点类似linux中的根目录 / 的那种感觉,但使用var_dump()函数打印时其实是空字符串 1 var_dump(__NAMESPACE__); 2 //string(0) "" 2.而对于 ......

对于面向对象编程而言,命名空间namespace和use的概念非常重要.

1.根命名空间是反斜线 \ ,有点类似linux中的根目录 / 的那种感觉,但使用var_dump()函数打印时其实是空字符串

1 var_dump(__namespace__);
2 //string(0) ""

2.而对于根下的子代命名空间,则会显示名称.

1 namespace app;
2 var_dump(__namespace__);
3 string(3) "app"

3.同一文件中可以有多个命名空间(仅从语法角度讨论).

 1 <?php
 2 namespace app;
 3 var_dump(__namespace__);
 4 namespace admin;
 5 var_dump(__namespace__);
 6 namespace shop;
 7 var_dump(__namespace__);
 8 //d:\workspace\mvc\test.php:3:
 9 //string(3) "app"
10 //d:\workspace\mvc\test.php:5:
11 //string(5) "admin"
12 //d:\workspace\mvc\test.php:7:
13 //string(4) "shop"

4.在同一文件中,在某个命名空间中使用另一个命名空间的类.

 1 <?php
 2 namespace app;
 3 var_dump(__namespace__);
 4 namespace admin;
 5 var_dump(__namespace__);
 6 class a{
 7     public static $name = 'classa';
 8 }
 9 namespace shop;
10 var_dump(__namespace__);
11 echo \admin\a::$name;
12 //d:\workspace\mvc\test.php:3:
13 //string(3) "app"
14 //d:\workspace\mvc\test.php:5:
15 //string(5) "admin"
16 //d:\workspace\mvc\test.php:10:
17 //string(4) "shop"
18 //classa

在命名空间shop中使用命名空间admin的类a,需要在admin前方加反斜线 \ ,表示从根命名空间查找,如果没有最前面的反斜线,则会报错.

5.文件a引入了另一个文件b,文件a中的命名空间不受影响.

文件b:

 1 <?php
 2 namespace app;
 3 var_dump(__namespace__);
 4 namespace admin;
 5 var_dump(__namespace__);
 6 class a{
 7     public static $name = 'classa';
 8 }
 9 namespace shop;
10 var_dump(__namespace__);
11 echo admin\a::$name;

文件a:

1 <?php
2 require 'b.php';
3 var_dump('k'.__namespace__.'k');
4 //string(2) "kk"

文件b中定义了很多命名空间,当文件a引入文件b后,并没有受到影响.

6.在文件2中使用文件1中某个命名空间的类

 

 1 <?php
 2 /*
 3 ** 1.php
 4 */
 5 namespace a;
 6 class test{
 7     const n = 1;
 8 }
 9 namespace b;
10 class test{
11     const n = 2;
12 }
1 <?php
2 /*
3 ** 2.php
4 */
5 require_once '1.php';
6 echo \a\test::n;//1
7 echo php_eol;
8 echo \b\test::n;//2

 

1 <?php
2 /*
3 ** 2.php
4 */
5 require_once '1.php';
6 use \a\test;
7 echo test::n;//1
8 echo php_eol;
9 echo b\test::n;//2