中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP之命名空間

發布時間:2020-07-24 00:19:17 來源:網絡 閱讀:396 作者:jjjssswww 欄目:web開發

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

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

 

定義

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

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

PHP之命名空間

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

PHP之命名空間

子命名空間

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

PHP之命名空間

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

PHP之命名空間

PHP之命名空間

<?php
    namespace MyProject\Sub\Level;    const NUM = 1;    echo NUM;//1
    echo \MyProject\Sub\Level\NUM;//1?>

PHP之命名空間

 

多命名空間

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

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

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

PHP之命名空間

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

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

PHP之命名空間

【2】大括號語法

PHP之命名空間

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

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

PHP之命名空間

PHP之命名空間

<?php
namespace MyProject {    const NUM = 1;
}

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

PHP之命名空間

全局

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

PHP之命名空間

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

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

PHP之命名空間

 

名稱解析

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

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

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

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

PHP之命名空間

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

PHP之命名空間

 

訪問內部元素

  PHP支持兩種抽象的訪問當前命名空間內部元素的方法,__NAMESPACE__ 魔術常量和namespace關鍵字

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

PHP之命名空間

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

PHP之命名空間

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

PHP之命名空間

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

PHP之命名空間

 

全局空間

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

PHP之命名空間

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

PHP之命名空間

 

別名和導入

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

  所有支持命名空間的PHP版本支持三種別名或導入方式:為類名稱使用別名、為接口使用別名或為命名空間名稱使用別名

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

別名

PHP之命名空間

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

PHP之命名空間

  as可以省略

PHP之命名空間

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

PHP之命名空間

導入

<?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(); // 調用函數 My\Full\NSname\subns\func?>


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

察雅县| 郸城县| 河东区| 通海县| 河北省| 德化县| 泗洪县| 鸡东县| 松桃| 磴口县| 区。| 连平县| 康平县| 景泰县| 井陉县| 济阳县| 祥云县| 库伦旗| 临朐县| 类乌齐县| 十堰市| 龙州县| 武乡县| 普陀区| 江都市| 凯里市| 双柏县| 灵山县| 南川市| 安徽省| 彩票| 海门市| 武邑县| 务川| 简阳市| 炎陵县| 鹤岗市| 仲巴县| 永春县| 边坝县| 鸡东县|