国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

PHP 命名空間原理與用法詳解

瀏覽:94日期:2022-09-10 17:21:19

本文實例講述了PHP 命名空間原理與用法。分享給大家供大家參考,具體如下:

命名空間適用于 (PHP 5 >= 5.3.0, PHP 7)

使用命名空間基礎

PHP 命名空間類似于文件系統,

在文件系統中訪問一個文件有三種方式: 相對文件名形式如foo.txt。它會被解析為 currentdirectory/foo.txt,其中 currentdirectory 表示當前目錄。因此如果當前目錄是 /home/foo,則該文件名被解析為/home/foo/foo.txt。 相對路徑名形式如subdirectory/foo.txt。它會被解析為 currentdirectory/subdirectory/foo.txt。 絕對路徑名形式如/main/foo.txt。它會被解析為/main/foo.txt。PHP 命名空間中的元素使用同樣的原理。例如,類名可以通過三種方式引用: 非限定名稱,或不包含前綴的類名稱,例如 $a=new foo(); 或 foo::staticmethod();。如果當前命名空間是 currentnamespace,foo 將被解析為currentnamespacefoo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,則 foo 會被解析為foo。 警告:如果命名空間中的函數或常量未定義,則該非限定的函數名稱或常量名稱會被解析為全局函數名稱或常量名稱。 限定名稱,或包含前綴的名稱,例如 $a = new subnamespacefoo(); 或 subnamespacefoo::staticmethod();。如果當前的命名空間是currentnamespace,則 foo 會被解析為 currentnamespacesubnamespacefoo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,foo 會被解析為subnamespacefoo。 完全限定名稱,或包含了全局前綴操作符的名稱,例如, $a = new currentnamespacefoo(); 或 currentnamespacefoo::staticmethod();。在這種情況下,foo 總是被解析為代碼中的文字名(literal name)currentnamespacefoo。定義命名空間

雖然任意合法的PHP代碼都可以包含在命名空間中,但只有以下類型的代碼受命名空間的影響,

它們是:

類(包括抽象類和traits) 接口 函數 常量

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

<html><?phpnamespace MyProject; // 致命錯誤 - 命名空間必須是程序腳本的第一條語句?>

Example 聲明單個命名空間

<?phpnamespace MyProject;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }?>在同一個文件中定義多個命名空間

定義多個命名空間,推薦用大括號語法

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

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

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

<?phpdeclare(encoding=’UTF-8’);namespace MyProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }}namespace { // 全局代碼session_start();$a = MyProjectconnect();echo MyProjectConnection::start();}?>namespace關鍵字和__NAMESPACE__常量

常量__NAMESPACE__的值是包含當前命名空間名稱的字符串。

如果不包括在任何命名空間中的代碼,則為一個空的字符串。

<?phpnamespace MyProject;echo ’'’, __NAMESPACE__, ’'’; // 輸出 'MyProject'?><?phpecho ’'’, __NAMESPACE__, ’'’; // 輸出 ''?>

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

<?phpnamespace MyProject;use blahblah as mine; // see 'Using namespaces: importing/aliasing'blahmine(); // calls function MyProjectblahmine()namespaceblahmine(); // calls function MyProjectblahmine()namespacefunc(); // calls function MyProjectfunc()namespacesubfunc(); // calls function MyProjectsubfunc()namespacecname::method(); // calls static method 'method' of class MyProjectcname$a = new namespacesubcname(); // instantiates object of class MyProjectsubcname$b = namespaceCONSTANT; // assigns value of constant MyProjectCONSTANT to $b?>使用命名空間:別名/導入

允許通過別名引用或導入外部的完全限定名稱,是命名空間的一個重要特征。這有點類似于在類 unix 文件系統中可以創建對其它的文件或目錄的符號連接。

在PHP中,別名是通過操作符 use 來實現的.

<?phpuse MyFullClassname as Another, MyFullNSname;$obj = new Another; // 實例化 MyFullClassname 對象NSnamesubnsfunc(); // 調用函數 MyFullNSnamesubnsfunc?>全局空間

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

<?phpnamespace ABC;/* 這個函數是 ABCfopen */function fopen() { /* ... */ $f = fopen(...); // 調用全局的fopen函數 return $f;} ?>使用命名空間:后備全局函數/常量

在一個命名空間中,當 PHP 遇到一個非限定的類、函數或常量名稱時,它使用不同的優先策略來解析該名稱。

類名稱總是解析到當前命名空間中的名稱。因此在訪問系統內部或不包含在命名空間中的類名稱時,必須使用完全限定名稱,

<?phpnamespace ABC;class Exception extends Exception {}$a = new Exception(’hi’); // $a 是類 ABCException 的一個對象$b = new Exception(’hi’); // $b 是類 Exception 的一個對象$c = new ArrayObject; // 致命錯誤, 找不到 ABCArrayObject 類?>

對于函數和常量來說,如果當前命名空間中不存在該函數或常量,PHP 會退而使用全局空間中的函數或常量。

<?phpnamespace ABC;const E_ERROR = 45;function strlen($str){ return strlen($str) - 1;}echo E_ERROR, 'n'; // 輸出 '45'echo INI_ALL, 'n'; // 輸出 '7' - 使用全局常量 INI_ALLecho strlen(’hi’), 'n'; // 輸出 '1'if (is_array(’hi’)) { // 輸出 'is not array' echo 'is arrayn';} else { echo 'is not arrayn';}?>

PHP 官方文檔:

http://php.net/manual/zh/language.namespaces.php

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

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

標簽: PHP
相關文章:
主站蜘蛛池模板: 精品中文字幕久久久久久 | 免费成人一级片 | 在线观看免费毛片 | 私人玩物福利视频 | 欧美亚洲国产日韩一区二区三区 | 欧美人交性视频在线香蕉 | 成年18网站免费视频网站 | 欧美精品v日韩精品v国产精品 | 久久99热精品免费观看k影院 | 国产视频综合 | 日本久久免费 | 久艹视频在线免费观看 | 日产一区两区三区四区 | 特级一级毛片免费看 | 97超级碰碰碰碰在线视频 | 高清国产美女一级a毛片录 高清国产亚洲va精品 | 怡红院最新免费全部视频 | 国产精品爱久久久久久久 | 一级做性色a爰片久久毛片 一级做性色a爰片久久毛片免费 | 点击进入不卡毛片免费观看 | 亚洲欧美不卡中文字幕 | 国产系列 视频二区 | 亚洲精品精品 | 99久久国产综合精品成人影院 | 亚洲美女一级片 | 国产成人十八黄网片 | 久青草免费视频手机在线观看 | 一区二区欧美视频 | 国产午夜精品不卡视频 | gdcm01果冻传媒 | 欧美高清性色生活片免费观看 | 成人国产精品一级毛片视频 | 一 级 黄 色 大片 | 在线观看一区 | 一级毛片真人不卡免费播 | 美国三级毛片 | 亚洲七七久久精品中文国产 | 国产午夜精品久久理论片小说 | 免费一级欧美片片线观看 | 国产一级一国产一级毛片 | 免费国产99久久久香蕉 |