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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

PHP命名空间学习笔记

發(fā)布時(shí)間:2024/4/13 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP命名空间学习笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

命名空間的支持版本:PHP 5 > 5.3.0,PHP 7 。

什么是命名空間

從廣義上來(lái)說(shuō),命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統(tǒng)中目錄用來(lái)將相關(guān)文件分組,對(duì)于目錄中的文件來(lái)說(shuō),它就扮演了命名空間的角色。具體舉個(gè)例子,文件 foo.txt 可以同時(shí)在目錄/home/greg 和 /home/other 中存在,但在同一個(gè)目錄中不能存在兩個(gè) foo.txt 文件。另外,在目錄 /home/greg 外訪問(wèn) foo.txt 文件時(shí),我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。這個(gè)原理應(yīng)用到程序設(shè)計(jì)領(lǐng)域就是命名空間的概念。

在PHP中,命名空間用來(lái)解決在編寫類庫(kù)或應(yīng)用程序時(shí)創(chuàng)建可重用的代碼如類或函數(shù)時(shí)碰到的兩類問(wèn)題:

  • 用戶編寫的代碼與PHP內(nèi)部的類/函數(shù)/常量或第三方類/函數(shù)/常量之間的名字沖突。
  • 為很長(zhǎng)的標(biāo)識(shí)符名稱(通常是為了緩解第一類問(wèn)題而定義的)創(chuàng)建一個(gè)別名(或簡(jiǎn)短)的名稱,提高源代碼的可讀性。

PHP 命名空間提供了一種將相關(guān)的類、函數(shù)和常量組合到一起的途徑。

定義命名空間

命名空間通過(guò)關(guān)鍵字namespace 來(lái)聲明。聲明命名空間的語(yǔ)句必須是文件的第一行語(yǔ)句,除了一個(gè)以外:declare關(guān)鍵字。在聲明命名空間之前唯一合法的代碼是用于定義源文件編碼方式的 declare 語(yǔ)句。另外,所有非 PHP 代碼包括空白符都不能出現(xiàn)在命名空間的聲明之前。同一個(gè)命名空間可以定義在多個(gè)文件中,即允許將同一個(gè)命名空間的內(nèi)容分割存放在不同的文件中。

<?php namespace MyProject;const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ }?>

同目錄具有層次結(jié)構(gòu)類似,命名空間也支持指定層次化的命名空間名稱。

<?php namespace MyProject\Sub\Level;const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ }?>

上面的例子創(chuàng)建了常量MyProject\Sub\Level\CONNECT_OK,類 MyProject\Sub\Level\Connection和函數(shù) MyProject\Sub\Level\connect。

PHP還支持在同一個(gè)文件中定義不同的命名空間,但是非常不建議這種用法,這里就不多說(shuō)了。

這里我有一個(gè)疑問(wèn),上面說(shuō)命名空間定義必須是文件的第一行代碼,那在一個(gè)文件中定義多個(gè)命名空間不就是會(huì)出現(xiàn)不在第一行的情況?
針對(duì)這個(gè)問(wèn)題試驗(yàn)了一下,對(duì)于一個(gè)文件中包含多個(gè)命名空間的,必須所有的代碼都在某一個(gè)命名空間中,否則就會(huì)報(bào)Fatal error: No code may exist outside of namespace {} in的錯(cuò)誤,對(duì)于全局代碼,那就放在全局的命名空間中,類似這樣namespace { }

使用命名空間

PHP 命名空間中的元素可以通過(guò)三種方式引用,以類名為例:

  • 非限定名稱,或不包含前綴的類名稱,例如 $a=new foo(); 或 foo::staticmethod();。如果當(dāng)前命名空間是 currentnamespace,foo 將被解析為 currentnamespace\foo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,則 foo 會(huì)被解析為foo。 警告:如果命名空間中的函數(shù)或常量未定義,則該非限定的函數(shù)名稱或常量名稱會(huì)被解析為全局函數(shù)名稱或常量名稱。詳情參見 使用命名空間:后備全局函數(shù)名稱/常量名稱。
  • 限定名稱,或包含前綴的名稱,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果當(dāng)前的命名空間是 currentnamespace,則 foo 會(huì)被解析為 currentnamespace\subnamespace\foo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,foo 會(huì)被解析為subnamespace\foo。
  • 完全限定名稱,或包含了全局前綴操作符的名稱,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在這種情況下,foo 總是被解析為代碼中的文字名(literal name)currentnamespace\foo。
  • NAMESPACE 常量

    常量__NAMESPACE__的值是包含當(dāng)前命名空間名稱的字符串。在全局的,不包括在任何命名空間中的代碼,它包含一個(gè)空的字符串。

    namespace 關(guān)鍵字

    關(guān)鍵字 namespace 可用來(lái)顯式訪問(wèn)當(dāng)前命名空間或子命名空間中的元素。它等價(jià)于類中的 self 操作符。

    使用命名空間

    所有支持命名空間的PHP版本支持三種別名或?qū)敕绞?#xff1a;為類名稱使用別名、為接口使用別名或?yàn)槊臻g名稱使用別名。PHP 5.6開始允許導(dǎo)入函數(shù)或常量或者為它們?cè)O(shè)置別名。在PHP中,別名是通過(guò)操作符 use 來(lái)實(shí)現(xiàn)的.

    <?php namespace foo; use My\Full\Classname as Another;// 下面的例子與 use My\Full\NSname as NSname 相同 use My\Full\NSname;// 導(dǎo)入一個(gè)全局類 use ArrayObject;// importing a function (PHP 5.6+) use function My\Full\functionName;// aliasing a function (PHP 5.6+) use function My\Full\functionName as func;// importing a constant (PHP 5.6+) use const My\Full\CONSTANT;$obj = new namespace\Another; // 實(shí)例化 foo\Another 對(duì)象 $obj = new Another; // 實(shí)例化 My\Full\Classname 對(duì)象 NSname\subns\func(); // 調(diào)用函數(shù) My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 實(shí)例化 ArrayObject 對(duì)象 // 如果不使用 "use \ArrayObject" ,則實(shí)例化一個(gè) foo\ArrayObject 對(duì)象 func(); // calls function My\Full\functionName echo CONSTANT; // echoes the value of My\Full\CONSTANT ?>

    注意對(duì)命名空間中的名稱(包含命名空間分隔符的完全限定名稱如 Foo\Bar以及相對(duì)的不包含命名空間分隔符的全局名稱如 FooBar)來(lái)說(shuō),前導(dǎo)的反斜杠是不必要的也不推薦的,因?yàn)閷?dǎo)入的名稱必須是完全限定的,不會(huì)根據(jù)當(dāng)前的命名空間作相對(duì)解析。為了簡(jiǎn)化操作,PHP還支持在一行中使用多個(gè)use語(yǔ)句。

    如果沒(méi)有定義任何命名空間,所有的類與函數(shù)的定義都是在全局空間,與 PHP 引入命名空間概念前一樣。在名稱前加上前綴 ?表示該名稱是全局空間中的名稱,即使該名稱位于其它的命名空間中時(shí)也是如此。

    參考資料:
    1、PHP 命名空間

    總結(jié)

    以上是生活随笔為你收集整理的PHP命名空间学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 天天狠狠操 | 精产国产伦理一二三区 | 卡一卡二卡三 | 夜夜爽妓女8888视频免费观看 | 免费观看视频一区 | 91 在线视频 | 亚洲视频手机在线 | 免费黄色三级 | 欧美成人精品一区二区 | 日本视频在线免费 | 日本xxxxxⅹxxxx69 | 久久综合色88 | 亚洲另类欧美日韩 | 一区二区三区日韩在线 | √天堂中文官网8在线 | 尤物综合网 | 久草免费在线视频观看 | 日本少妇电影 | 99这里 | 亚洲国产aⅴ成人精品无吗 日韩乱论 | 激情综合五月天 | 欧美日韩一区二区三区国产精品成人 | 强睡邻居人妻中文字幕 | 人妻少妇偷人精品久久性色 | 成人av一区二区在线观看 | 中文精品在线观看 | 亚洲午夜一区二区 | 国产精品99久久久久久久久久久久 | 国产毛片视频 | 日韩大尺度在线观看 | 国产欧美精品一区二区在线播放 | 亚洲人成色777777精品音频 | 999国产视频| 欧美私人网站 | 91综合在线 | 精品一区久久久 | 免费av不卡在线观看 | 欧美综合一区二区三区 | 久热国产视频 | 97视频人人 | 一级片特黄 | 午夜色网 | 在线看黄色的网站 | 伊人网视频 | 国产日韩欧美在线观看 | 激情四射综合网 | 成人精品视频 | 四虎精品成人免费网站 | www.久久久久久久久久 | 国产精品久久久久久久成人午夜 | 日本特黄视频 | 伊人影院在线播放 | 日本xxx在线播放 | 天堂在线资源库 | 在线观看亚洲免费视频 | 在线不卡免费av | 黄金网站在线观看 | 久久国产精品偷 | 日韩女优在线视频 | 中国美女黄色一级片 | 91视频一区 | 综合婷婷| 麻豆精品国产传媒av绿帽社 | 久久97精品久久久久久久不卡 | 蜜臀人妻四季av一区二区不卡 | 亚洲av无码一区二区三区dv | 中文字幕av一区二区三区 | 男人你懂的网站 | 国产一区91 | 欧美热热| 亚洲精品视频导航 | 日韩18p| 亚洲深夜av | 成人网色| 熟妇人妻无乱码中文字幕真矢织江 | aaa一区二区三区 | 91久久久久国产一区二区 | 天天想你在线观看完整版电影高清 | 美女综合网 | 女同一区二区三区 | av福利社 | 国产网红无码精品视频 | 亚洲精品在线中文字幕 | 亚洲视频网站在线 | 欧美日韩亚洲国产另类 | 91免费.| 国产伦精品一区二区三区网站 | 亚洲一级无毛 | 最好看的2018中文2019 | 人与禽一级全黄 | 日本视频一区二区 | 国产成人在线播放 | 激情综合色 | 伊伊成人网 | 欧美日本黄色 | 九九天堂 | 国产精久久久久久 | 中国一级特黄毛片 | 三级免费|