亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP進階學習之命名空間基本用法分析

2024-05-05 00:09:44
字體:
來源:轉載
供稿:網友

本文實例講述了PHP進階學習之命名空間基本用法。分享給大家供大家參考,具體如下:

前言

命名空間(namespace),在編程語言中,是對作用域的一種特殊的抽象.它表示著一個標識符的可見范圍。一個標識符可在多個命名空間中定義,它在不同命名空間中的含義是互不相干的。這樣,在一個新的命名空間中可定義任何標識符,它們不會與任何已有的標識符發生沖突,因為已有的定義都處于其他命名空間中。

在PHP中也存在命名空間的用法,由它控制可見范圍的這個標識符一般指的就是類和函數。

一、PHP命名空間基礎

從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如PHP的類名是不可以重復的,但是經常我們需要引入一些第三方的類庫,常常類名就會在項目中產生重復沖突,所以,命名空間就是解決這個沖突的一種方法。

在PHP5.3以后,就已經引入了命名空間(namespace)的概念,即同個命名空間下的類名不能重復,不同命名空間下可以存在同名的類。

這樣,在引入第三方類庫的時候,只有各個類庫的命名空間不一樣,就不會產生沖突。

所以根據官方所說,在PHP中,命名空間用來解決在編寫類庫或應用程序時創建可重用的代碼如類或函數時碰到的兩類問題:

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

需要注意的是:

  • 同個文件下可以存在多個命名空間;
  • 不同命名空間內的類可以相互調用。

PHP,命名空間

二、PHP命名空間的用法

1、定義

命名空間的定義采用關鍵字namespace,定義方式如下:

namespace example

則該命名空間下的類都歸屬于該命名空間,example命名空間下的類不能重名。

或者可以定義多級命名空間:

namespace example/test/demo

則改命名空間下的類全歸屬于example/test/demo命名空間。

定義后的命名空間可以用_?_?NAMESPACE_?_?魔法變量來獲取當前命名空間。

2、引入

引入命名空間使用關鍵字use,可以通過多個use在一個文件中引入多個命名空間:

use example;use example/test/demo;

需要使用到哪個命名空間的類和方法,則use哪個命名空間,前提是這些命名空間的實際文件地址已經包含進來了,或者說能實現自動的類加載了。

3、實例化

在程序中實例化并使用某個命名空間下的類方法,同樣使用new關鍵字進行實例化,但是需要在類名前面加上命名空間前綴。

例如:

$class = new example/a();//實例化example命名空間下的a類$class = new example/test/demo/b(); //實例化example/test/demo命名空間下的b類

如果在文件前面已經引入了這些命名空間,則可以不需要類的前綴:

use example;use example/test/demo;$class = new a();//實例化example命名空間下的a類$class = new b(); //實例化example/test/demo命名空間下的b類

注:如果use的時候是use example/test;則在實例化b類時要帶上相對命名空間路徑(注意不是實際文件路徑),即new demo/b();

當然所有的實例化都可以直接使用絕對路徑形式,即在命名空間前面加/字符,如new /example/test/demo/b();這樣就采用了絕對路徑形式實例化了b類。

4、別名

在用namespace定義命名空間的時候,為了避免之后引用的時候命名空間過長,可以在定義時采用as關鍵字為一個命名空間指定別名

namespace example/test/demo as testDemo;

這樣在之后引用或實例化的時候就可以new testDemo/<類名>();

三、基于PSR4的命名空間規范

由于方法、類在不同項目中命名空間定義不一致,第三方類庫的命名空間也定義不一致,所以相關php組織出臺了一套約定俗成的規范,即PSR4規范,

用來規范命名空間的定義規則。

具體規范如下:

1. 一個完整的類名需具有以下結構:

/<命名空間>(/<子命名空間>)*/<類名>
    1. 完整的類名 必須 要有一個頂級命名空間,被稱為 "vendor namespace";
    2. 完整的類名 可以 有一個或多個子命名空間;
    3. 完整的類名 必須 有一個最終的類名;
    4. 完整的類名中任意一部分中的下滑線都是沒有特殊含義的;
    5. 完整的類名 可以 由任意大小寫字母組成;
    6. 所有類名都 必須 是大小寫敏感的。

2. 當根據完整的類名載入相應的文件

    (1). 完整的類名中,去掉最前面的命名空間分隔符,前面連續的一個或多個命名空間和子命名空間,作為「命名空間前綴」,其必須與至少一個「文件基目錄」相對應;
    (2). 緊接命名空間前綴后的子命名空間 必須 與相應的「文件基目錄」相匹配,其中的命名空間分隔符將作為目錄分隔符。
    (3). 末尾的類名 必須 與對應的以 .php 為后綴的文件同名。

    (4). 自動加載器(autoloader)的實現 一定不可 拋出異常、一定不可 觸發任一級別的錯誤信息以及 不應該 有返回值。

看起來很復雜,其實規范的要點就是,命名空間的路徑要與當前文件的路徑相對應,這樣規范了所有項目命名空間的定義準則,雖然PHP官方沒有

強制規定,但如今許多開源項目都已經約定俗成地使用了,這種規范便于查找命名空間下的類所在的路徑。

例如,文件目錄a/b/c下有d.php,則在a目錄下的的文件引入d的類時,應該是use b/c或use /a/b/c;(絕對路徑形式)

四、注意點

1、代碼復用類Trait也符合命名空間的規范,即通過命名空間下Trait類不能重名;
2、雖然PSR4規定了命名空間路徑與文件路徑需要相對應,但是運行php時命名空間路徑與文件路徑是沒有任何關系的,例如a/b/c下的文件類d,命名空間可以寫成a1/b1/c1/d;只不過現在的許多開源框架在實現類自動加載的時候把兩者規范為一致,否則會出現類文件加載到了,但是命名空間卻加載不到的情況。
3、在命名空間內部,所有的沒有根據導入規則轉換的限定名稱均會在其前面加上當前的命名空間名稱。例如,在命名空間A/B內部調用C/D/e(),則C/D/e()會被轉換為A/B/C/D/e()。
4、在命名空間內部(例如A/B),對非限定名稱的函數調用是在運行時解析的。例如對函數foo()的調用是這樣解析的:
(1)在當前命名空間中查找名為A/B/foo()的函數
(2)嘗試查找并調用全局(global)空間中的函數foo()。
5、在命名空間(例如A/B)內部對非限定名稱或限定名稱類(非完全限定名稱)的調用是在運行時解析的。下面是調用new C()及new D/E()的解析過程:new C()的解析:
(1)在當前命名空間中查找A/B/C類。
(2)嘗試自動裝載類A/B/C。

以上內容引用了PSR4文檔地址:http://www.php-fig.org/psr/psr-4/

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
98精品国产高清在线xxxx天堂| 久久久久久久久久婷婷| 黄色成人av在线| 欧美久久久精品| 久久在线免费视频| 亚洲自拍偷拍在线| 久久久91精品国产| 黑人巨大精品欧美一区二区| 久久99精品久久久久久噜噜| 色偷偷综合社区| 最近免费中文字幕视频2019| 成人免费视频网| 久久久久国产精品www| 欧美影院成年免费版| 欧美日韩国产在线看| 欧美黑人一级爽快片淫片高清| 国产欧美精品一区二区| 九九久久国产精品| 欧美天天综合色影久久精品| 综合网日日天干夜夜久久| 91av免费观看91av精品在线| 成人高清视频观看www| 8x海外华人永久免费日韩内陆视频| 欧美激情网站在线观看| 欧美一区二粉嫩精品国产一线天| 91中文字幕在线观看| 久久久999成人| 成人国产精品一区| 欧美制服第一页| 国产精品久久久久不卡| 992tv在线成人免费观看| 日韩欧美高清视频| 久久久久久久久中文字幕| 日韩精品亚洲视频| 久久亚洲欧美日韩精品专区| 国产一区视频在线播放| 国产日韩精品综合网站| 亚洲欧美一区二区三区久久| 97av在线视频免费播放| 久久久亚洲天堂| 日韩福利伦理影院免费| 欧美激情精品在线| 欧美激情按摩在线| 欧美激情一区二区三区成人| 91久久精品美女| 91成人国产在线观看| 久久亚洲一区二区三区四区五区高| 91免费的视频在线播放| 欧美日韩亚洲国产一区| 久久久视频免费观看| 亚洲尤物视频网| 97国产成人精品视频| 国产亚洲激情视频在线| 国产日韩在线一区| 中文字幕欧美精品在线| 久久久噜噜噜久久久| 国产一区二区三区久久精品| 国产日韩中文在线| 日韩中文理论片| 97国产suv精品一区二区62| 91精品国产91久久久久久最新| 欧美中文字幕精品| 97欧美精品一区二区三区| 国产精品精品久久久| www.午夜精品| 日韩美女视频在线观看| 欧美一级在线播放| 日韩欧美一区二区在线| 欧美日韩免费观看中文| 一个人看的www欧美| 久久99热这里只有精品国产| 亚洲爱爱爱爱爱| 欧美日韩成人在线视频| 91九色视频导航| 亚洲精品久久久久久久久久久久久| 日韩中文字幕亚洲| 日韩在线视频观看正片免费网站| 欧美精品在线看| 日本高清视频精品| 亚洲天堂网站在线观看视频| 国产一区二区三区在线观看视频| 亚洲天堂色网站| 亚洲韩国青草视频| 久久国内精品一国内精品| 亚洲最大成人在线| 不卡av电影在线观看| 福利视频导航一区| 日韩中文字幕网址| 久久中文字幕在线| 97在线观看视频国产| 精品久久久久人成| 亚洲色图五月天| 国产精品美女久久久免费| 国产成一区二区| 久久久久久亚洲精品中文字幕| 国产精品美女www爽爽爽视频| 欧美国产乱视频| 久久99久久99精品中文字幕| 91亚洲午夜在线| 欧美日韩激情美女| 欧美高清在线观看| 国产精品9999| 国产精品黄页免费高清在线观看| 91欧美视频网站| 欧美激情视频在线免费观看 欧美视频免费一| 夜夜嗨av色综合久久久综合网| 超碰精品一区二区三区乱码| 国产做受高潮69| 伊人激情综合网| 在线精品国产成人综合| 日韩欧美在线视频| 精品调教chinesegay| 日韩专区在线播放| 欧美www在线| 高清一区二区三区四区五区| 成人妇女免费播放久久久| 欧美成人久久久| 国产在线久久久| 91丨九色丨国产在线| 欧美日韩ab片| 亚洲精品电影久久久| 91精品国产自产在线| 韩日欧美一区二区| 亚洲最大激情中文字幕| 国产精品美乳一区二区免费| 日韩最新中文字幕电影免费看| 成人黄色在线观看| 国产丝袜一区二区三区| 亚洲电影免费观看高清完整版在线观看| 亚洲精品久久久久久下一站| 亚洲成色999久久网站| 国产精品久久在线观看| 日韩亚洲欧美成人| 68精品久久久久久欧美| 欧美日韩国产精品一区二区三区四区| 热99久久精品| 国产欧美精品一区二区| 日韩欧美福利视频| 欧美黄色片视频| 国产精品视频中文字幕91| 亚洲天堂av电影| 国产精品丝袜高跟| 深夜福利亚洲导航| 91午夜理伦私人影院| 国产精品久久97| 亚洲成人xxx| 深夜福利国产精品| 国产精品91在线| 久久久91精品| 理论片在线不卡免费观看| 亚洲精品国产精品国自产观看浪潮| 日韩av网站导航| 欧美午夜精品久久久久久人妖| 久久全球大尺度高清视频| 欧美日韩精品在线视频| 97av在线视频免费播放| 国产精品视频免费在线观看| 欧美激情免费视频| 国产+人+亚洲| 亚洲美女av在线播放| 国产香蕉一区二区三区在线视频| 国产精品69精品一区二区三区| 97人洗澡人人免费公开视频碰碰碰| 日本一区二区在线免费播放|