測試環境 PHP version 5.3.29/5.6.29/7.1.0 Apache 2.4.25
在PHP中,命名空間用來解決在編寫類庫或應用程序時創建可重用的代碼如類或函數時碰到的兩類問題:
用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。<?php namespace NS; define(__NAMESPACE__ .'/foo','111'); define('foo','222'); echo foo; // 111. echo /foo; // 222. echo /NS/foo; // 111. echo NS/foo; // fatal error. assumes /NS/NS/foo.只有 類(包括抽象類和traits)、接口、函數和const定義的常量
類型的代碼受命名空間的影響。
同一個命名空間可以定義在多個文件中,即允許將同一個命名空間的內容分割存放在不同的文件中。
所有非 PHP 代碼包括空白符都不能出現在命名空間的聲明之前。
PHP 命名空間允許使用反斜杠 /
指定層次化的命名空間的名稱。 命名空間不可以嵌套,但是可以使用子命名空間,達到相同的效果。
在同一個文件中定義多個命名空間有兩種語法形式:簡單組合語法與大括號語法,但是兩種風格在一個文件中不能混合使用。
如果使用大括號語法,請注意花括號{}
外面不允許有任何代碼。以下代碼全都改成大括號語法也是錯的,因為結束標簽 ?>
后面有空格或者是換行,建議在純PHP代碼的文件中不要寫PHP結束標簽 ?>
。
use
關鍵字必須在文件全局范圍或者是已經聲明的其他命名空間里,不可以在塊作用域里,這是因為外部命名空間導入是在編譯時而不是運行時完成的。
PHP5.6 之前只能通過use導入命名空間和類,PHP 5.6 之后允許導入常量和方法。 PHP 7.0 后支持分組導入命名空間。
<?php// Pre PHP 7.0 codeuse some/Mynamespace/ClassA;use some/Mynamespace/ClassB;use some/Mynamespace/ClassC as C;use function some/Mynamespace/fn_a;use function some/Mynamespace/fn_b;use function some/Mynamespace/fn_c;use const some/Mynamespace/ConstA;use const some/Mynamespace/ConstB;use const some/Mynamespace/ConstC;// PHP 7+ codeuse some/Mynamespace/{ClassD, ClassE, ClassF as F};use function some/Mynamespace/{fn_d, fn_e, fn_f};use const some/Mynamespace/{ConstD, ConstE, ConstF};新聞熱點
疑難解答
圖片精選