日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

namespace命名空间的使用

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 namespace命名空间的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、何為命名空間

PHP 命名空間(namespace)是在PHP 5.3中加入的。“什么是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統中目錄用來將相關文件分組,對于目錄中的文件來說,它就扮演了命名空間的角色。具體舉個例子,文件 foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 文件。另外,在目錄 /home/greg 外訪問 foo.txt 文件時,我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。這個原理應用到程序設計領域就是命名空間的概念。”命名空間可以解決以下兩類問題:

  • 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
  • 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。
  • 二、命名空間的使用概要

    Tips:以下示例中成為了兩個文件,一個Demo.php,一個index.php,兩個文件處于同級目錄下;Demo.php文件中書寫命名空間以及Demo類,index.php調用Demo.php中的Demo類;如下示例中的“輸出結果”即表示瀏覽器訪問index.php。

    (一)、簡單示例

    Demo.php文件代碼:

    <?php namespace DemoNameSpace;class Demo {private $mysqlHandle;public function __construct() {echo '這是PHP演示的名稱空間,(PHP的魔術常量"__NAMESPACE__")當前命名空間的名稱是 '.__NAMESPACE__;} } ?>

    index.php文件代碼:

    <?phpinclude 'Demo.php';use DemoNameSpace\Demo;$DemoObj = new Demo(); ?>

    輸出結果:這是PHP演示的名稱空間,(PHP的魔術常量"__NAMESPACE__")當前命名空間的名稱是DemoNameSpace
      以上示例中使用的魔法常量__NAMESPACE__的意思是當前命名空間的名稱(區分大小寫)。

    (二)、報錯示例

    Demo.php不做變動,改動index.php文件,如下:

    <?phpinclude 'Demo.php';$Demo = new Demo(); ?>

    輸出結果:“Fatal error: Class ‘Demo’ not found in D:\WWW\demo\index.php on line 4”

    這個是常見的“致命錯誤”信息。之所以會出現這樣的錯誤,是因為我們在Demo.php中使用了命名空間:namespace DemoNameSpace 。我們把Demo.php中的這行代碼注釋掉后。這個語句,就正常了。這是咱們平常寫class以及調用class最常見的書寫方法,這里就不介紹了。

    對比使用namespace與不使用namespace的兩種輸出情況,并加入namespace的定義理解后,上述出現致命錯誤的情況就很好理解了。在Demo.php中定義了一個namespace,也就是命名空間后,接著定義了Demo類,然后這個Demo類就被歸并到了DemoNameSpace命名空間中去了,那么要調用這個Demo類時,自然要先調用這個DemoNameSpace命名空間了,也就是在index.php文件中使用“useDemoNameSpace\Demo”語句了。

    (三)、稍復雜的示例

    Demo.php文件代碼:

    <?php header("content-type:text/html;charset=utf-8); namespace DemoNameSpace; class Demo {private $mysqlHandle;public function __construct() {echo '這是PHP演示的名稱空間,(PHP的魔術常量"__NAMESPACE__")當前命名空間的名稱是 '.__NAMESPACE__;} }namespace DemoNameSpace1; const constDefine = 'Tom'; class Demo {private $mysql;const constant = 'Jerry';public function __construct() {echo 'The const constant outside class is: '.constDefine;echo ' and ';echo 'The const constant inside class is: '.self::constDefine;} } ?>

    index.php文件代碼

    <?php// 在同級目錄下include 'Demo.php';use DemoNameSpace\Demo as Test;//給同類名添加別名$Demo = new Test;echo "<br/>";//換行use DemoNameSpace1\Demo as Test1;//給同類名添加別名$Demo1 = new Test1();echo "<hr/>";//橫線echo DemoNameSpace1\constDefine; ?>

    輸出結果:
      這是PHP演示的名稱空間,(PHP的魔術常量"NAMESPACE")當前命名空間的名稱是DemoNameSpace`
    The const constant outside class is: Tom and The const constant inside class is: Jerry Tom


    三、namespace總結

    1、namespace前面不要有任何代碼,注釋除外。不管是header("content-type:text/html;charset=utf-8);還是其他什么代碼。都要放在namespace的后面。否則會報錯。
      2、命名空間下直接new該命名空間中的class名稱,可以省略掉use語法,這是php按腳本書寫順序執行導致的。同一腳本下new一個沒有指定use哪個命名空間時,會順著該腳本,使用最靠近new語句之前的一個命名空間中的class。
      3、公共空間:可以簡單的理解,沒有定義命名空間的方法(函數)、類庫(class)、屬性(變量)都默認歸屬于公共空間。這樣就解釋了為php5.3.0以前版本書寫的代碼大部分為何在php5.3.0及其以上版本還能正常運行的原因。另外:公共空間中的代碼段被引入到某個命名空間下后,該公共空間中的代碼段不屬于任何命名空間!
      4、就如目錄結構一樣,命名空間也有子命名空間的概念,具體就不再舉例說明了。

    總結

    以上是生活随笔為你收集整理的namespace命名空间的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。