TShopping

 找回密碼
 註冊
搜索
查看: 500|回復: 0

[教學] PHP名稱空間 namespace 及匯入 use 的用法

[複製鏈接]
發表於 2021-9-12 22:53:53 | 顯示全部樓層 |閱讀模式
 
Push to Facebook
轉載自
在PHP中,出現同名函式或是同名類是不被允許的。為防止程式設計人員在專案中定義的類名或函式名出現重複衝突,在PHP5.3中引入了名稱空間這一概念。

1.名稱空間,即將程式碼劃分成不同空間,不同空間的類名相互獨立,互不衝突。一個php檔案中可以存在多個名稱空間,第一個名稱空間前不能有任何程式碼。內容空間宣告後的程式碼便屬於這個名稱空間,例如:

  1. <?php
  2. echo 111;       //由於namespace前有程式碼而報錯
  3. namespace Teacher;
  4. class Person{
  5.   function __construct(){
  6.     echo 'Please study!';
  7.   }
  8. }
複製代碼

2.呼叫不同空間內類或方法需寫明名稱空間。例如:

  1. <?php
  2. namespace Teacher;
  3. class Person{
  4.   function __construct(){
  5.     echo 'Please study!<br/>';
  6.   }
  7. }
  8. function Person(){
  9.   return 'You must stay here!';
  10. };
  11. namespace Student;
  12. class Person{
  13.   function __construct(){
  14.     echo 'I want to play!<br/>';
  15.   }
  16. }
  17. new Person();                    //本空間(Student空間)
  18. new \Teacher\Person();           //Teacher空間
  19. new \Student\Person();           //Student空間
  20. echo \Teacher\Person();          //Teacher空間下Person函式
  21. //輸出:
  22. I want to play!
  23. Please study!
  24. I want to play!
  25. You must stay here!
複製代碼

3.在名稱空間內引入其他檔案不會屬於本名稱空間,而屬於公共空間或是檔案中本身定義的名稱空間。例:

首先定義一個1.php和2.php檔案:

  1. <?php     //1.php
  2. class Person{
  3.   function __construct(){
  4.     echo 'I am one!<br/>';
  5.   }
  6. }
複製代碼
  1. <?php
  2. namespace Newer;
  3. require_once './1.php';
  4. new Person();      //報錯,找不到Person;
  5. new \Person();     //輸出 I am tow!;
複製代碼
  1. <?php     //2.php
  2. namespace Two
  3. class Person{
  4.   function __construct(){
  5.     echo 'I am tow!<br/>';
  6.   }
  7. }
複製代碼
  1. <?php
  2. namespace New;
  3. require_once './2.php';
  4. new Person();      //報錯,(當前空間)找不到Person;
  5. new \Person();     //報錯,(公共空間)找不到Person;
  6. new \Two\Person();  //輸出 I am tow!;
複製代碼

4.下面我們來看use的使用方法:(use以後引用可簡寫)

   
  1. namespace School\Parents;
  2. class Man{
  3.   function __construct(){
  4.     echo 'Listen to teachers!<br/>';
  5.   }
  6. }
  7. namespace School\Teacher;
  8. class Person{
  9.   function __construct(){
  10.      echo 'Please study!<br/>';
  11.   }
  12. }
  13. namespace School\Student;
  14. class Person{
  15.   function __construct(){
  16.     echo 'I want to play!<br/>';
  17.   }
  18. }
  19. new Person();                   //輸出I want to play!
  20. new \School\Teacher\Person();   //輸出Please study!
  21. new Teacher\Person();           //報錯
  22. ----------
  23. use School\Teacher;  
  24. new Teacher\Person();           //輸出Please study!   
  25. ----------
  26. use School\Teacher as Tc;  
  27. new Tc\Person();           //輸出Please study!  
  28. ----------
  29. use \School\Teacher\Person;
  30. new Person();           //報錯
  31. ----------
  32. use \School\Parent\Man;
  33. new Man();           //報錯
複製代碼


 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2022-5-20 08:49 , Processed in 0.249670 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表