欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解PHP中的命名空間

 更新時(shí)間:2021年04月30日 09:52:10   作者:硬核項(xiàng)目經(jīng)理  
這篇文章主要介紹了PHP中的命名空間的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用PHP,感興趣的朋友可以了解下

命名空間其實(shí)早在PHP5.3就已經(jīng)出現(xiàn)了。不過(guò)大部分同學(xué)可能在各種框架的使用中才會(huì)接觸到命名空間的內(nèi)容,當(dāng)然,現(xiàn)代化的開(kāi)發(fā)也都離不開(kāi)這些能夠快速產(chǎn)出的框架。這次我們不從框架的角度,僅從簡(jiǎn)單的代碼角度來(lái)解析一下命名空間的概念和使用。

首先,我們要定義命名空間是個(gè)什么東西。

其實(shí)就像操作系統(tǒng)的目錄一樣,命名空間就是為了解決類(lèi)似于操作系統(tǒng)中同一個(gè)文件夾不能有相同的文件名一樣的問(wèn)題。假設(shè)我們只有一個(gè)文件,一個(gè)目錄,那么在這個(gè)目錄中,是不能有兩個(gè)完全相同的文件的。如果有這樣名稱(chēng)完全相同的文件,那么操作系統(tǒng)也不知道我們到底應(yīng)該打開(kāi)的是哪一個(gè)文件。同理,在一個(gè)PHP文件中,我們也不能起相同名稱(chēng)的函數(shù)或者類(lèi)名,PHP也不知道我們到底要調(diào)用的是哪一個(gè)函數(shù)或者類(lèi)。

理解了上述內(nèi)容之后,再來(lái)看命名空間的語(yǔ)法,其實(shí)非常像我們的目錄的定義。

namespace A\B\C;

這個(gè)命名空間的定義就是指出了當(dāng)前命名空間是A\B\C。就像是C:\A\B\C這樣一個(gè)文件夾一樣。光說(shuō)不練假把式,直接上代碼來(lái)看看:

// file1.php
namespace FILE1;

const CONST_A = 2;
function testA(){
    echo 'FILE1\testA()', PHP_EOL;
}

class objectA{
    function test(){
        echo 'FILE1\ObjectA', PHP_EOL;
    }
}
// file2.php
namespace FILE2;

const CONST_A = 3;
function testA(){
    echo 'FILE2\testA()', PHP_EOL;
}

class objectA{
    function test(){
        echo 'FILE2\ObjectA', PHP_EOL;
    }
}

我們?cè)趎amespace目錄下創(chuàng)建了這兩個(gè)php文件,函數(shù)和類(lèi)名都是一樣的,但定義了不同的命名空間,一個(gè)是FILE1,一個(gè)是FILE2。

namespace A;

include 'namespace/file1.php';
include 'namespace/file2.php';

use FILE1, FILE2;
use FILE1\objectA as objectB;

const CONST_A = 1;
function testA(){
    echo 'A\testA()', PHP_EOL;
}

class objectA{
    function test(){
        echo 'A\ObjectA', PHP_EOL;
    }
}

// 當(dāng)前命名空間
echo CONST_A, PHP_EOL; // 1
testA(); // A\testA()
$oA = new objectA();
$oA->test(); // A\ObjectA

// FILE1
echo FILE1\CONST_A, PHP_EOL; // 2
FILE1\testA(); // FILE1\testA()
$oA = new FILE1\objectA();
$oA->test(); // FILE1\ObjectA

$oB = new objectB();
$oB->test(); // FILE1\ObjectA

// FILE2
echo FILE2\CONST_A, PHP_EOL; // 3
FILE2\testA(); // FILE2\testA()
$oA = new FILE2\objectA();
$oA->test(); // FILE2\ObjectA

在測(cè)試代碼中,我們又定義了當(dāng)前的命名空間為A。并include了file1.php和file2.php。并在這個(gè)文件中同時(shí)也定義了與file1.php和file2.php中相同的函數(shù)和類(lèi)名。接下來(lái)我們依次調(diào)用這些靜態(tài)變量、函數(shù)和類(lèi)。

  • 在默認(rèn)情況下,靜態(tài)變量、函數(shù)、類(lèi)調(diào)用的是當(dāng)前命名空間下的內(nèi)容
  • 在使用了FILE1\和FILE2\之后,調(diào)用的是就是指定命名空間下的內(nèi)容
  • 需要使用use引入命名空間,否則無(wú)法使用命名空間里的內(nèi)容
  • use中可以使用as關(guān)鍵字為命名空間或者其中的類(lèi)指定別名

命名空間的使用其實(shí)就是這么的簡(jiǎn)單??梢钥闯鑫覀?cè)诓煌拿臻g中就可以使用相同的函數(shù)或者類(lèi)名了。這一點(diǎn)正是各類(lèi)現(xiàn)代化開(kāi)發(fā)框架的基礎(chǔ)。同時(shí)也是composer能夠?qū)崿F(xiàn)的最主要的原因之一。

接下來(lái),我們嘗試一個(gè)問(wèn)題是否符合我們的預(yù)期,那就是兩個(gè)文件定義相同的命名空間是否能夠定義相同的類(lèi)名呢?

// file1-1.php
namespace FILE1;

const CONST_A = 1.1;
function testA(){
    echo 'FILE1-1\testA()', PHP_EOL;
}

class objectA{
    function test(){
        echo 'FILE1-1\ObjectA', PHP_EOL;
    }
}

我們定義了一個(gè)file1-1.php,并且使用了和file1.php相同的FILE1命名空間。然后和file1.php一起include到測(cè)試代碼中。

include 'namespace/file1.php';
include 'namespace/file1-1.php'; // Cannot redeclare FILE1\testA()

好吧,在運(yùn)行時(shí)直接就報(bào)錯(cuò),不能重復(fù)定義同名的函數(shù)名。如果注釋掉函數(shù),那么會(huì)繼續(xù)報(bào)類(lèi)名不能重復(fù)。我們?cè)俣x一個(gè)file1-2.php,這次還是使用FILE1這個(gè)命名空間,但是內(nèi)容不一樣了。

// file1-2.php
namespace FILE1;

const CONST_A = 1.2;
function testA1_2(){
    echo 'FILE1-2\testA()', PHP_EOL;
}

class objectA1_2{
    function test(){
        echo 'FILE1-2\ObjectA', PHP_EOL;
    }
}

這樣當(dāng)然就沒(méi)問(wèn)題啦。這兩個(gè)文件在同一個(gè)命名空間下,但是卻有著不同的能力,這樣是完全OK的操作。

include 'namespace/file1.php';
include 'namespace/file1-2.php';
use FILE1;

// FILE1
echo FILE1\CONST_A, PHP_EOL; // 2
FILE1\testA(); // FILE1\testA()
$oA = new FILE1\objectA();
$oA->test(); // FILE1\ObjectA

// FILE1_2
echo FILE1\CONST_A, PHP_EOL; // 3
FILE1\testA1_2(); // FILE1-2\testA()
$oA = new FILE1\objectA1_2();
$oA->test(); // FILE1-2\ObjectA

測(cè)試代碼: github.com/zhangyue050…

以上就是詳解PHP中的命名空間的詳細(xì)內(nèi)容,更多關(guān)于PHP 命名空間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 什么是PHP7中的孤兒進(jìn)程與僵尸進(jìn)程

    什么是PHP7中的孤兒進(jìn)程與僵尸進(jìn)程

    在本篇內(nèi)容里小編給大家整理了關(guān)于PHP7之孤兒進(jìn)程與僵尸進(jìn)程的知識(shí)點(diǎn)和概念,需要的朋友們學(xué)習(xí)參考下。
    2019-04-04
  • php調(diào)用云片網(wǎng)接口發(fā)送短信的實(shí)現(xiàn)方法

    php調(diào)用云片網(wǎng)接口發(fā)送短信的實(shí)現(xiàn)方法

    這篇文章主要介紹了php調(diào)用云片網(wǎng)接口發(fā)送短信的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • 優(yōu)化php效率,提高php性能的一些方法

    優(yōu)化php效率,提高php性能的一些方法

    優(yōu)化php效率,提高php性能的一些方法,開(kāi)發(fā)php的朋友可以注意下。
    2011-03-03
  • PHP常用設(shè)計(jì)模式之委托設(shè)計(jì)模式

    PHP常用設(shè)計(jì)模式之委托設(shè)計(jì)模式

    委托是對(duì)一個(gè)類(lèi)的功能進(jìn)行擴(kuò)展和復(fù)用的方法。它的做法是:寫(xiě)一個(gè)附加的類(lèi)提供附加的功能,并使用原來(lái)的類(lèi)的實(shí)例提供原有的功能,接下來(lái)通過(guò)本文給大家介紹PHP委托設(shè)計(jì)模式實(shí)例詳解,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • PHP簡(jiǎn)單獲取隨機(jī)數(shù)的常用方法小結(jié)

    PHP簡(jiǎn)單獲取隨機(jī)數(shù)的常用方法小結(jié)

    這篇文章主要介紹了PHP簡(jiǎn)單獲取隨機(jī)數(shù)的常用方法,結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)指定范圍隨機(jī)數(shù)與指定字符序列隨機(jī)數(shù)的簡(jiǎn)單實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • php 高性能書(shū)寫(xiě)

    php 高性能書(shū)寫(xiě)

    從這里就可以看到,第二段代碼會(huì)因應(yīng)數(shù)組中的鍵的個(gè)數(shù)去不停地作出判斷次數(shù)為1+2+3的判斷,所以變成了第一段代碼判斷次數(shù)是3,而第二段代碼判斷次數(shù)是6次
    2010-12-12
  • Linux下源碼包安裝Swoole及基本使用操作圖文詳解

    Linux下源碼包安裝Swoole及基本使用操作圖文詳解

    這篇文章主要介紹了Linux下源碼包安裝Swoole及基本使用操作,結(jié)合圖文形式詳細(xì)分析了Linux環(huán)境下下載、安裝Swoole及基本使用相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • php觀(guān)察者模式應(yīng)用場(chǎng)景實(shí)例詳解

    php觀(guān)察者模式應(yīng)用場(chǎng)景實(shí)例詳解

    這篇文章主要介紹了php觀(guān)察者模式應(yīng)用場(chǎng)景,結(jié)合完整實(shí)例形式詳細(xì)分析了php觀(guān)察者模式的具體定義與使用技巧,需要的朋友可以參考下
    2017-02-02
  • php數(shù)組冒泡排序算法實(shí)例

    php數(shù)組冒泡排序算法實(shí)例

    這篇文章主要介紹了php數(shù)組冒泡排序算法,以簡(jiǎn)單實(shí)例形式分析了php數(shù)組冒泡排序算法的實(shí)現(xiàn)原理與相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • PHP人民幣金額數(shù)字轉(zhuǎn)中文大寫(xiě)的函數(shù)代碼

    PHP人民幣金額數(shù)字轉(zhuǎn)中文大寫(xiě)的函數(shù)代碼

    在網(wǎng)上看到一個(gè)非常有趣的PHP人民幣金額數(shù)字轉(zhuǎn)中文大寫(xiě)的函數(shù),其實(shí)質(zhì)就是數(shù)字轉(zhuǎn)換成中文大寫(xiě),測(cè)試了一下,非常有趣,隨便輸個(gè)數(shù)字,就可以將其大寫(xiě)打印出來(lái),新手朋友們?cè)囈幌掳?/div> 2013-02-02

最新評(píng)論