欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

PHP之命名空間

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

10年積累的網(wǎng)站設(shè)計、成都網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計制作后付款的網(wǎng)站建設(shè)流程,更有芝罘免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

定義

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

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

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

子命名空間

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

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


多命名空間

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

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

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

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

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

【2】大括號語法

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

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

namespace AnotherProject {    const NUM = 2;    echo NUM;//2
    echo \MyProject\NUM;//1}?>

全局

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

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

namespace { // global codesession_start();$a = MyProject\connect();echo MyProject\Connection::start();
}?>

名稱解析

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

限定名稱Qualified name是指名稱中含有命名空間分隔符的標識符,例如 Foo\Bar

完全限定名稱Fully qualified name是指名稱中包含命名空間分隔符,并以命名空間分隔符開始的標識符,例如 \Foo\Bar。 namespace\Foo 也是一個完全限定名稱

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

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

訪問內(nèi)部元素

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

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

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

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

<?php
namespace MyProject;    function test(){        echo '111';
    }
    test();//111
    __NAMESPACE__.test();//111
    namespace\test();//111?>

全局空間

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

<?php
namespace A\B\C;/* 這個函數(shù)是 A\B\C\fopen */function fopen() { 
     /* ... */
     $f = \fopen(...); // 調(diào)用全局的fopen函數(shù)
     return $f;
} 
?>

別名和導入

php允許通過別名引用或?qū)胪獠康耐耆薅Q,是命名空間的一個重要特征。這有點類似于在類unix文件系統(tǒng)中可以創(chuàng)建對其它的文件或目錄的符號連接

所有支持命名空間的PHP版本支持三種別名或?qū)敕绞剑簽轭惷Q使用別名、為接口使用別名或為命名空間名稱使用別名

在PHP中,別名是通過操作符 use 來實現(xiàn)的

別名

<?php
namespace hello\world\test;use hello\world\test  as  t;//用t來替代hello\world\testfunction demo(){    echo '111';
}
t\demo();//111?>

as可以省略

<?php
namespace hello\world\test;use hello\world\test;//用test來替代hello\world\testfunction demo(){    echo '111';
}
test\demo();//111?>

導入

<?phpuse \ArrayObject;$a = new ArrayObject([]);//若不使用"use \ArrayObject" ,則實例化一個 foo\ArrayObject 對象?>

為了簡化,一行中可以包含多個use語句

<?phpuse My\Full\Classname as Another, My\Full\NSname;$obj = new Another; // 實例化 My\Full\Classname 對象NSname\subns\func(); // 調(diào)用函數(shù) My\Full\NSname\subns\func?>

網(wǎng)頁標題:PHP之命名空間
分享鏈接:http://chinadenli.net/article28/joicjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導航、品牌網(wǎng)站制作、微信公眾號標簽優(yōu)化、建站公司、網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
久久大香蕉精品在线观看| 一二区中文字幕在线观看| 亚洲国产精品肉丝袜久久| 国内精品偷拍视频久久| 在线免费不卡亚洲国产| 亚洲中文字幕高清乱码毛片 | 亚洲少妇人妻一区二区| 日本精品免费在线观看| 欧美极品欧美精品欧美| 亚洲中文字幕在线综合视频| 国产内射在线激情一区| 欧美野外在线刺激在线观看| 欧美日韩在线第一页日韩| 中文字幕日韩无套内射| 黄片在线免费看日韩欧美| 91蜜臀精品一区二区三区| 日韩色婷婷综合在线观看| 国产精品丝袜一二三区| 欧美人禽色视频免费看| 国产级别精品一区二区视频| 欧洲精品一区二区三区四区| 婷婷激情五月天丁香社区| 欧美尤物在线观看西比尔| 麻豆一区二区三区在线免费| 国产又大又硬又粗又湿| 色婷婷在线精品国自产拍| 精品国产亚洲av成人一区| 老司机精品视频在线免费看| 偷拍偷窥女厕一区二区视频| 欧洲精品一区二区三区四区| 一区二区三区18禁看| 国产欧美日韩在线精品一二区| 亚洲一区二区三区三州| 国产内射一级二级三级| 亚洲天堂精品1024| 欧美日韩在线视频一区| 日韩精品一区二区三区四区| 最近日韩在线免费黄片| 久久国产亚洲精品赲碰热| 日韩不卡一区二区三区色图| 天堂网中文字幕在线视频|