測(cè)試環(huán)境 PHP version 5.3.29/5.6.29/7.1.0 Apache 2.4.25
在PHP中,命名空間用來(lái)解決在編寫(xiě)類(lèi)庫(kù)或應(yīng)用程序時(shí)創(chuàng)建可重用的代碼如類(lèi)或函數(shù)時(shí)碰到的兩類(lèi)問(wèn)題:
用戶(hù)編寫(xiě)的代碼與PHP內(nèi)部的類(lèi)/函數(shù)/常量或第三方類(lèi)/函數(shù)/常量之間的名字沖突。 為很長(zhǎng)的標(biāo)識(shí)符名稱(chēng)(通常是為了緩解第一類(lèi)問(wèn)題而定義的)創(chuàng)建一個(gè)別名(或簡(jiǎn)短)的名稱(chēng),提高源代碼的可讀性。<?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.只有 類(lèi)(包括抽象類(lèi)和traits)、接口、函數(shù)和const定義的常量 類(lèi)型的代碼受命名空間的影響。
同一個(gè)命名空間可以定義在多個(gè)文件中,即允許將同一個(gè)命名空間的內(nèi)容分割存放在不同的文件中。
所有非 PHP 代碼包括空白符都不能出現(xiàn)在命名空間的聲明之前。
PHP 命名空間允許使用反斜杠 / 指定層次化的命名空間的名稱(chēng)。 命名空間不可以嵌套,但是可以使用子命名空間,達(dá)到相同的效果。
在同一個(gè)文件中定義多個(gè)命名空間有兩種語(yǔ)法形式:簡(jiǎn)單組合語(yǔ)法與大括號(hào)語(yǔ)法,但是兩種風(fēng)格在一個(gè)文件中不能混合使用。
如果使用大括號(hào)語(yǔ)法,請(qǐng)注意花括號(hào){}外面不允許有任何代碼。以下代碼全都改成大括號(hào)語(yǔ)法也是錯(cuò)的,因?yàn)榻Y(jié)束標(biāo)簽 ?> 后面有空格或者是換行,建議在純PHP代碼的文件中不要寫(xiě)PHP結(jié)束標(biāo)簽 ?>。
use 關(guān)鍵字必須在文件全局范圍或者是已經(jīng)聲明的其他命名空間里,不可以在塊作用域里,這是因?yàn)橥獠棵臻g導(dǎo)入是在編譯時(shí)而不是運(yùn)行時(shí)完成的。
PHP5.6 之前只能通過(guò)use導(dǎo)入命名空間和類(lèi),PHP 5.6 之后允許導(dǎo)入常量和方法。 PHP 7.0 后支持分組導(dǎo)入命名空間。
<?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};新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注