日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php中命名空间重要吗,关于php:PHP中命名空间是怎样的存在一

發布時間:2025/3/19 php 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php中命名空间重要吗,关于php:PHP中命名空间是怎样的存在一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

命名空間其實早在PHP5.3就曾經呈現了。不過大部分同學可能在各種框架的應用中才會接觸到命名空間的內容,當然,現代化的開發也都離不開這些可能疾速產出的框架。這次咱們不從框架的角度,僅從簡略的代碼角度來解析一下命名空間的概念和應用。

首先,咱們要定義命名空間是個什么貨色。

其實就像操作系統的目錄一樣,命名空間就是為了解決相似于操作系統中同一個文件夾不能有雷同的文件名一樣的問題。假如咱們只有一個文件,一個目錄,那么在這個目錄中,是不能有兩個完全相同的文件的。如果有這樣名稱完全相同的文件,那么操作系統也不曉得咱們到底應該關上的是哪一個文件。同理,在一個PHP文件中,咱們也不能起雷同名稱的函數或者類名,PHP也不曉得咱們到底要調用的是哪一個函數或者類。

了解了上述內容之后,再來看命名空間的語法,其實十分像咱們的目錄的定義。

namespace A\B\C;

這個命名空間的定義就是指出了以后命名空間是A\B\C。就像是C:\A\B\C這樣一個文件夾一樣。光說不練假把式,間接上代碼來看看:

// 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;

}

}

咱們在namespace目錄下創立了這兩個php文件,函數和類名都是一樣的,但定義了不同的命名空間,一個是FILE1,一個是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;

}

}

// 以后命名空間

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

在測試代碼中,咱們又定義了以后的命名空間為A。并include了file1.php和file2.php。并在這個文件中同時也定義了與file1.php和file2.php中雷同的函數和類名。接下來咱們順次調用這些動態變量、函數和類。

在默認狀況下,動態變量、函數、類調用的是以后命名空間下的內容

在應用了FILE1\和FILE2\之后,調用的是就是指定命名空間下的內容

須要應用use引入命名空間,否則無奈應用命名空間里的內容

use中能夠應用as關鍵字為命名空間或者其中的類指定別名

命名空間的應用其實就是這么的簡略。能夠看出咱們在不同的命名空間中就能夠應用雷同的函數或者類名了。這一點正是各類現代化開發框架的根底。同時也是composer可能實現的最次要的起因之一。

接下來,咱們嘗試一個問題是否合乎咱們的預期,那就是兩個文件定義雷同的命名空間是否可能定義雷同的類名呢?

// 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;

}

}

咱們定義了一個file1-1.php,并且應用了和file1.php雷同的FILE1命名空間。而后和file1.php一起include到測試代碼中。

include 'namespace/file1.php';

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

好吧,在運行時間接就報錯,不能反復定義同名的函數名。如果正文掉函數,那么會持續報類名不能反復。咱們再定義一個file1-2.php,這次還是應用FILE1這個命名空間,然而內容不一樣了。

// 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;

}

}

這樣當然就沒問題啦。這兩個文件在同一個命名空間下,然而卻有著不同的能力,這樣是齊全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

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/source/PHP%E4%B8%AD%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E6%98%AF%E6%80%8E%E6%A0%B7%E7%9A%84%E5%AD%98%E5%9C%A8%EF%BC%9F%EF%BC%88%E4%B8%80%EF%BC%89.php

參考文檔:

https://www.php.net/manual/zh/language.namespaces.rationale.php

https://www.php.net/manual/zh/language.namespaces.definition.php

===========

各自媒體平臺均可搜尋【硬核項目經理】

總結

以上是生活随笔為你收集整理的php中命名空间重要吗,关于php:PHP中命名空间是怎样的存在一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。