国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

前端學(xué)PHP之命名空間

2020-03-22 19:05:55
字體:
供稿:網(wǎng)友

  • 前面的話

      從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統(tǒng)中目錄用來將相關(guān)文件分組,對于目錄中的文件來說,它就扮演了命名空間的角色。這個原理應(yīng)用到程序設(shè)計領(lǐng)域就是命名空間的概念

      在PHP中,命名空間用來解決在編寫類庫或html' target='_blank'>應(yīng)用程序時創(chuàng)建可重用的代碼如類或函數(shù)時碰到的兩類問題:一類是用戶編寫的代碼與PHP內(nèi)部的類/函數(shù)/常量或第三方類/函數(shù)/常量之間的名字沖突;另一類是為很長的標(biāo)識符名稱(通常是為了緩解第一類問題而定義的)創(chuàng)建一個別名(或簡短)的名稱,提高源代碼的可讀性。PHP命名空間提供了一種將相關(guān)的類、函數(shù)和常量組合到一起的途徑。本文將詳細介紹PHP的命名空間

    定義

      雖然任意合法的PHP代碼都可以包含在命名空間中,但只有以下類型的代碼受命名空間的影響,它們是:類(包括抽象類和traits)、接口、函數(shù)和常量

      命名空間通過關(guān)鍵字namespace來聲明。如果一個文件中包含命名空間,它必須在其它所有代碼之前聲明命名空間,除了一個以外:declare關(guān)鍵字

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

    子命名空間

      與目錄和文件的關(guān)系很象,PHP 命名空間也允許指定層次化的命名空間的名稱。因此,命名空間的名字可以使用分層次的方式定義

    <?phpnamespace MyProjectSubLevel;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */  }?>
    <?php    namespace MyProjectSubLevel;    const NUM = 1;    echo NUM;//1    echo MyProjectSubLevelNUM;//1?>

    多命名空間

      可以在同一個文件中定義多個命名空間。在同一個文件中定義多個命名空間有兩種語法形式

      在實際的編程實踐中,非常不提倡在同一個文件中定義多個命名空間。這種方式的主要用于將多個 PHP 腳本合并在同一個文件中

    【1】簡單組合語法(不建議使用)

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

    【2】大括號語法

    <?phpnamespace MyProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */  }}namespace AnotherProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */  }}?>
    <?phpnamespace MyProject {    const NUM = 1;}namespace AnotherProject {    const NUM = 2;    echo NUM;//2    echo MyProjectNUM;//1}?>

    全局

      將全局的非命名空間中的代碼與命名空間中的代碼組合在一起,只能使用大括號形式的語法。全局代碼必須用一個不帶名稱的 namespace 語句加上大括號括起來 

    <?phpnamespace MyProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */  }}namespace { // global codesession_start();$a = MyProjectconnect();echo MyProjectConnection::start();}?>

    名稱解析

      非限定名稱Unqualified name是指名稱中不包含命名空間分隔符的標(biāo)識符,例如 Foo

      限定名稱Qualified name是指名稱中含有命名空間分隔符的標(biāo)識符,例如 FooBar

      完全限定名稱Fully qualified name是指名稱中包含命名空間分隔符,并以命名空間分隔符開始的標(biāo)識符,例如 FooBar。 namespaceFoo 也是一個完全限定名稱

      如果要動態(tài)訪問元素(例如,變量函數(shù)),必須使用完全限定名稱

    <?phpnamespace MyProject;    function test(){        echo '111';    }    $var1 = 'test';    $var2 = 'MyProject	est';    $var1();//報錯    $var2();/111?>

    訪問內(nèi)部元素

      PHP支持兩種抽象的訪問當(dāng)前命名空間內(nèi)部元素的方法,__NAMESPACE__ 魔術(shù)常量和namespace關(guān)鍵字

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

    <?phpnamespace MyProject;    function test(){        echo '111';    }    $var = __NAMESPACE__.'	est';    $var();//111?>        

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 县级市| 定远县| 萝北县| 武夷山市| 万源市| 突泉县| 邢台市| 兴仁县| 本溪市| 博白县| 称多县| 漠河县| 克东县| 清苑县| 涿鹿县| 息烽县| 蓬安县| 达州市| 新疆| 利川市| 临邑县| 沂南县| 四子王旗| 旬阳县| 绩溪县| 绥江县| 萨嘎县| 东阳市| 九台市| 闽清县| 含山县| 七台河市| 维西| 万州区| 金坛市| 长岭县| 广昌县| 习水县| 凌云县| 鱼台县| 马尔康县|