欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

PHP關(guān)鍵特性之命名空間的示例分析

這篇文章主要介紹PHP關(guān)鍵特性之命名空間的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

斗門網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

你知道命名空間主要是為了解決代碼中類和函數(shù)可能存在沖突的問題的嗎?而這個(gè)特性其他語言一早就有,PHP則是姍姍來遲,它的出現(xiàn)催生了 PSR-4 的誕生,從而也催生了 Composer 的興起,所以是非常重要的特性。

命名空間的定義

命名空間是一個(gè)容器,這個(gè)容器主要是為了識別其下的類和函數(shù)。一旦定義了命名空間,它下面的代碼就屬于這個(gè)命名空間了,所以命名空間的定義要在代碼的最開始行。

對于同一個(gè)包來說,同一個(gè)命名空間或者子命名空間的代碼沒有必要在一個(gè) PHP 文件中定義,子命名空間下的代碼是為了完成特定模塊的工作,組合起來就是一個(gè)包完整的命名空間。

假如編寫的代碼沒有定義命名空間,那說明它屬于全局的命名空間(\ 符號),所以能夠直接引用類或者函數(shù)(不用添加 \ 符號)。

引用命名空間標(biāo)識符的三種方式

(1)Fully-qualified name

類似于操作系統(tǒng)上的絕對路徑,而且是完整的路徑,所以在理解的時(shí)候不會(huì)有誤解。
比如在 new \A\B\C ,那么 C 就被會(huì)解析到 A\B 命名空間下的 C 類。

(2)Qualified name

類似于操作系統(tǒng)上的相對路徑,它包含部分名字并被引用到當(dāng)前的命名空間。
比如 B\C() 在命名空間 A 下調(diào)用,則最終引用的命名空間就是 A\B\C()。

(3)Unqualified name

類似于Qualified name,但是沒包括子命名空間。
比如 C() 在命名空間 A\B 下調(diào)用,則最終引用的命名空間就是 A\B\C()。

通過一個(gè)例子來說明三種引用方式:

namespace \Example;
require_once "fnction.php";
class ClassA {}
function Function() {}

//完全限定名稱
\Example\Function();
\Example\B\Function(); 

//限定名稱
B\Function(); //指向 \Example\B\Function();

//非限定名稱
$test = new ClassA(); //resolves to \Example\ClassA
Function(); //指向 \Example\Function

注意:

  • Inside a namespace,假如在 current scope 沒有發(fā)現(xiàn)函數(shù)和常量的定義,PHP 不會(huì)報(bào)錯(cuò)。而是去全局命名空間中尋找。

  • Inside a namespace,假如在 current scope 沒有發(fā)現(xiàn)類的定義,則 PHP 會(huì)直接報(bào)錯(cuò),不會(huì)去全局域中找對應(yīng)的類,所以假如你需要引用一個(gè) internal 或用戶自定義的類,必須使用完全限定名稱。

先舉個(gè)簡單的例子,首先編寫一段代碼(定義在命名空間下),命名為 function.php :

namespace Foo\Bar\subnamespace;
const FOO = 1;
function foo() 
{
    return "foo\r\n";
}
class foo 
{
    static function staticmethod()
    {
        return __METHOD__ . "\r\n" ;
    }

    function foofunction()
    {
        return __METHOD__ . "\r\n" ;
    }
}

再編寫一段代碼 test.php,也是處于命名空間之下的代碼:

namespace secondsp;
include 'function.php';

class foo
{
    function foofunction()
    {
        return __METHOD__ . "\r\n" ;
    }
}

function is_file($file)
{
    return true ;
}
 
//非限定名稱:實(shí)例化secondsp\foo類對象
$obj = new foo;  
echo $obj->foofunction();

//實(shí)例化Foo\Bar\subnamespace\foo 類對象
$obj = new Foo\Bar\subnamespace\foo ;
echo $obj->foofunction();

//代碼會(huì)報(bào)錯(cuò),在命名空間內(nèi)部,假如無法找到當(dāng)前命名空間下的類,則會(huì)報(bào)錯(cuò)
//$obj = new ArrayObject(array(1)); 
$obj = new \ArrayObject(array(1)); 

//在命名空間內(nèi)部,假如無法找到當(dāng)前命名空間下的函數(shù)或者常量,則會(huì)尋找 native function
echo  strlen("nihao");

 //引用當(dāng)前命名空間下的函數(shù)
var_dump(is_file('nihao')); //True
//引用全局函數(shù)
var_dump(\is_file('nihao')); //False
導(dǎo)入,別名

假如要使用的命名空間層級很長且數(shù)量很多,那么在使用的時(shí)候特別麻煩,所以可以使用 use 關(guān)鍵字導(dǎo)入命名空間、類、常量、函數(shù)等,然后可以使用它們直接引用完整的名稱。而 alias 關(guān)鍵字可以給導(dǎo)入的類和函數(shù)等重命名。

舉個(gè)例子如何使用 use 關(guān)鍵字,該代碼處于全局命名空間之下:

include 'function.php';

use Foo\Bar\subnamespace\foo ;
$obj = new foo;
echo $obj->foofunction();

use Foo\Bar\subnamespace\foo  as aliasfunname;
$obj = new aliasfunname;
echo $obj->foofunction();
 
use Foo\Bar\subnamespace ; 
$obj = new subnamespace\foo ;
echo $obj->foofunction();

use Foo\Bar\subnamespace  as aliasname;
$obj = new aliasname\foo ;
echo $obj->foofunction();

//由于調(diào)用代碼并不在命名空間內(nèi),所以對于全局的類,無需引入使用
$obj = new ArrayObject(array(1)); 

//導(dǎo)入一個(gè)函數(shù)
use function Foo\Bar\subnamespace\foo   ;
echo foo();
 
use function Foo\Bar\subnamespace\foo  as func;
echo func();
 
use const  Foo\Bar\subnamespace\FOO;
//echo FOO;

總結(jié):

  • 和 Python 不一樣,PHP 中的命名空間是語義上的一種概念,和具體代碼的位置、布局沒有關(guān)系,換句話說,使用命名空間的代碼需要自己引入庫文件(所有文件),至于庫文件如何組織無所謂;而在 Python 中,假如模塊或包中有一個(gè) __init__.py 文件,則 Python 解析器會(huì)自動(dòng)引入包或所有模塊的文件。

  • PHP 中作用域的概念很弱化,全局域和局部域分的很清楚,比如在函數(shù)或類中無法引用全局空間中的變量。而在命名空間則不同,定義命名空間的代碼,假如找不到對應(yīng)命名空間下的常量和函數(shù),則會(huì)使用全局的常量和函數(shù);而假如找不到對應(yīng)名命名空間下的類(包括自定義類),則代碼直接報(bào)錯(cuò)。

  • 通過 use 關(guān)鍵字使用命名空間的,無須通過完全限定名稱的方式(\ 符號)導(dǎo)入,因?yàn)?PHP 已經(jīng)假設(shè)導(dǎo)入的是完全限定的命名空間。

  • 通過 use 關(guān)鍵字可以導(dǎo)入常量、函數(shù)、類、接口、其他命名空間。

  • 命名空間是一種語言特性,為了追求更有效的使用,應(yīng)該有一種使用規(guī)范和自動(dòng)加載機(jī)制,這就是 PSR-4 規(guī)范。

以上是“PHP關(guān)鍵特性之命名空間的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站題目:PHP關(guān)鍵特性之命名空間的示例分析
當(dāng)前地址:http://aaarwkj.com/article42/gpiihc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、微信公眾號、定制開發(fā)、電子商務(wù)移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站營銷

廣告

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

網(wǎng)站優(yōu)化排名
欧美日韩一区二区三区色| 国产午夜福利视频合集| 人人妻人人澡人人爽的视频| 欧美专区另类综合日韩| 一卡二卡三卡四卡日韩| 在线观看中文字幕日韩精品| 久久夜色一区二区三区| 九九久久精品久久久精品| 久久久久久精品人妻网| 校园春色亚洲欧美日韩| 久久国产成人精品免费看| 久久精品女人天堂av免费观看| 91天美精东果冻麻豆| 五月婷婷av综合激情| 麻豆精品情欲人妻二区| 在线观看男人的天堂av| 91人妻精品一区二区| 黄色亚洲一区二区三区四区| 偷拍大神女厕偷拍作品| 亚洲av色国产精品色午含羞草| 香蕉久草官网视频观看| 亚洲一区麻豆文化传媒| 国产精品久久亚洲一区二区| 亚洲精品国产二区中文字幕| 日韩欧美国产一区二区精品| 亚洲一区二区三区日韩欧美| 蜜臀一区二区三区精品免费| 精品久久人人做爽综合| 国产乱码精品免费一区二区av| 国产亚洲欧美日韩网站| 久久久久久成人亚洲| 国产剧情av网址观看免费| 日本九州不卡久久精品一区| 亚洲激情午夜福利视频| 91精品人妻一区二区| 中文字幕人妻秘书社长| 亚洲日本韩国福利久久| 高级会所口爆视频在线播放视频 | 日本二区三区在线视频| 国产亚洲成人精品一区| 成人av在线播放亚洲|