對於面向對象編程而言,命名空間namespace和use的概念非常重要. 1.根命名空間是反斜線 \ ,有點類似linux中的根目錄 / 的那種感覺,但使用var_dump()函數列印時其實是空字元串 1 var_dump(lxx_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