亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 34
粉絲 1
評論 0
訪問量 43058
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
命名空間的創(chuàng)建及訪問和使用use導(dǎo)入命名空間并使用別名訪問以及非限定名稱,限定名稱和完全限定名稱
coolperJie
原創(chuàng)
1298人瀏覽過


對名空間命的解釋:

        命名空間使用的關(guān)鍵字是namespace其主要目的就是為了代碼復(fù)用,那么代碼復(fù)用為什么會要用到命名空間呢?原因是因?yàn)轭?函數(shù),常量都是全局有效,包括在函數(shù)中也可以直接使用,因此,在全局中不允許有重名的類,函數(shù)和常量。如果想從外部導(dǎo)入一個函數(shù)庫或類庫,他們的函數(shù)名,類名極有可能與當(dāng)前腳本沖突,所以,必須要有一套對于工作在全局范圍內(nèi)的腳本成員,進(jìn)行標(biāo)識符命名沖突處理的機(jī)制。命名空間就是這樣一套解決方案,他不僅可以讓用戶為全局成員起一個較短的名稱,又解決了第三方資源的引入帶來的重名問題。

    案例一:最基礎(chǔ)的命名空間的使用案例,用大括號語法實(shí)現(xiàn)在一個腳本中創(chuàng)建多個命名空間并訪問成員:

<?php

//命名空間

// 用大括號語法實(shí)現(xiàn)在一個腳本中創(chuàng)建多個命名空間并訪問成員

namespace One 

{

 class A 

 {

  const SITE = "PHP后臺管理";

  public $name = "php";

  public function show() 

  {

   return "空間One的方法:";

  }

 }

}

namespace Two 

{

 class A

 {

  const SITE = "JavaScripe";

  public $name = "中文網(wǎng)";

  public function hello() 

  {

   return "空間Two的方法:";

  }

 }

 //在Two空間下調(diào)用本空間內(nèi)的常量

 echo A::SITE.'<br>';

 //在Two空間下調(diào)用One空間內(nèi)的屬性

 echo (new \One\A())->name.'<br>';

 //在Two空間下調(diào)用One空間內(nèi)的常量

 echo \One\A::SITE.'<br>';

 //輸出One空間下的函數(shù)

 echo (new \One\A())->show().'<br>';

 //輸出當(dāng)前空間的名字

 echo '當(dāng)前命名空間是: '.__NAMESPACE__.'<br>';

}

 namespace

 {

  //在全局空間下調(diào)用One空間內(nèi)的常量

  echo (new \One\A())->name.'<br>';

 } 

?>

 說明:命名空間的關(guān)鍵字是namespace,namespace之前不能有除了declare和注釋之外的任何代碼,html也不行,如果當(dāng)前腳本聲明了命名空間,則所有成員的訪問,就必須使用命名空間,包括系統(tǒng)函數(shù);在不同空間內(nèi)調(diào)用其他空間的類中的函數(shù)或方法需要加上對應(yīng)空間的路徑,值得注意的是,在沒有使用任何命名空間的情部下,所有類,常量,函數(shù)全部聲明在全局空間,用\表示,如果沒有明確定義某個空間,那么就是默認(rèn)在全局空間下,另外在聲明類,常量,函數(shù)的時候,前面不需要添加\,調(diào)用的時候才需要添加\;還有一點(diǎn)是,在全局不允許重復(fù)聲明類,常量與函數(shù)。

案例二:使用use 導(dǎo)入其它腳本中的類/常量/函數(shù),并使用別名方式訪問:

<?php

namespace One 

{

 class A 

 {

  const SITE = "PHP后臺管理";

  public $name = "php";

  public function show() 

  {

   return "空間One的方法:";

  }

 }

}

namespace Two 

{

 class A

 {

  const SITE = "JavaScripe";

  public $name = "中文網(wǎng)";

  public function hello() 

  {

   return "空間Two的方法:";

  }

 }

}
<?php

//使用use 導(dǎo)入其它腳本中的類/常量/函數(shù),并使用別名方式訪問

namespace Three

{

include 'demo2.php'; 

//通過use使用空間One

use  \One\A as A1 ;

 class A

 {

  public function show()

  {

   return '空間C的方法';

  }

 }

 //在空間Three中使用空間One中的常量

 echo A1::SITE.'<br>';

 //在空間Three中使用空間One中的方法

 echo (new A1())->show().'<br>';

 //在空間Three中使用空間One中的屬性

 echo (new A1())->name.'<br>';

}

?>

說明:use關(guān)鍵字導(dǎo)入一個命名空間,結(jié)合include,require等把相應(yīng)文件包涵進(jìn)來可以達(dá)到跨文件調(diào)用不同命名空間中類的目的,同時使用關(guān)鍵字as 可以使調(diào)用不同空間中的類中函數(shù)或方法時使代碼更加的簡潔直觀。

問答:非限定名稱,限定名稱和完全限定名稱的命名空間之間的區(qū)別與聯(lián)系是什么?

答:我的理解是可以把它和文件訪問的思路去考慮,非限定名稱就是在當(dāng)前自己的命名空間下訪問自己類的函數(shù)或方法,不需要加上命名空間的前綴,而限定名稱就是在A命名空間中訪問B空間下類的函數(shù)或方法,此時就需要先表明你要在哪個空間下找,要不然系統(tǒng)是找不到的,而完全限定名稱其實(shí)包含了他們?nèi)魏蔚氖褂们闆r,就是直接在前邊加上絕對路徑,其實(shí)他是包涵非限定和限定的,但是有時候是不需要完全限定名稱的,要在合理的情況下使用各種方式,才不會有畫蛇添足的情況出現(xiàn)

批改狀態(tài):合格

老師批語:
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)