php中命名空間namespace和use

對於面向對象編程而言,命名空間namespace和use的概念很是重要.php

1.根命名空間是反斜線 \ ,有點相似linux中的根目錄 / 的那種感受,但使用var_dump()函數打印時實際上是空字符串linux

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

2.而對於根下的子代命名空間,則會顯示名稱.編程

1 namespace App;
2 var_dump(__NAMESPACE__);
3 string(3) "App"

3.同一文件中能夠有多個命名空間(僅從語法角度討論).mvc

 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前方加反斜線 \ ,表示從根命名空間查找,若是沒有最前面的反斜線,則會報錯.ui

5.文件A引入了另外一個文件B,文件A中的命名空間不受影響.spa

文件B:code

 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後,並無受到影響.blog

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
相關文章
相關標籤/搜索