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

php命名空間舉例介紹使用方法

 更新時(shí)間:2022年09月10日 09:47:49   作者:島淚  
從廣義上來說,命名空間是一種封裝事物的方法,在很多地方都可以見到這種抽象概念。PHP中命名空間(namespace)是在 PHP5.3 中加入的,如果你了解過 C++ 的話,那命名空間就不算什么新事物了。不過命名空間在 PHP 當(dāng)中還是相當(dāng)重要的

命名空間是為了解決當(dāng)前文件內(nèi)相同作用域內(nèi)常量名之間、函數(shù)名之間、類名之間的命名沖突。

在 PHP 中變量名是不會(huì)沖突的,在相同作用域內(nèi),對(duì)于同一個(gè)變量,最后一個(gè)變量會(huì)取代前一個(gè)變量的值。

舉例

同一作用域,相同變量

<?php
$a = '123';
$a = '456';
$a = '789';
echo $a; //顯示 789

代碼編輯器不報(bào)錯(cuò),PHP運(yùn)行結(jié)果不報(bào)錯(cuò),顯示最后一個(gè) $a 的值。

同一作用域,相同常量

<?php
const a = '123';
const a = '356';
const a = '789';
echo a //顯示 123

代碼編輯器報(bào)錯(cuò),PHP運(yùn)行結(jié)果不報(bào)錯(cuò),顯示第一個(gè)常量 a 的值。

常量換成 define 定義

<?php
define('a',123);
define('a',456);
define('a',789);
echo a; //顯示 123

代碼編輯器報(bào)錯(cuò),PHP運(yùn)行結(jié)果不報(bào)錯(cuò),顯示第一個(gè)常量 a 的值,和 const 定義常量的結(jié)果一樣。

同一作用域,相同函數(shù)

<?php
function a(){
    echo '123';
}
function a(){
    echo '456';
}
a(); // PHP 運(yùn)行結(jié)果報(bào)錯(cuò) Cannot redeclare a()

代碼編輯器報(bào)錯(cuò),PHP 運(yùn)行結(jié)果報(bào)錯(cuò)。

同一作用域,相同類

<?php
class A{
    public function __construct()
    {
        echo '123';
    }
}
class A{
    public function __construct()
    {
        echo '456';
    }
}
new A(); // PHP 運(yùn)行結(jié)果報(bào)錯(cuò) 
//Fatal error: Cannot declare class A, because the name is already in use in

代碼編輯器報(bào)錯(cuò),PHP 運(yùn)行結(jié)果報(bào)錯(cuò)。

在編程中,如果代碼全都是自己一個(gè)人完成的,常量名之間、函數(shù)名之間、類名之間可能不會(huì)出現(xiàn)重名的情況,但是在實(shí)際的工作中,

1、大多數(shù)任務(wù)都是需要團(tuán)隊(duì)協(xié)作來完成,我們要如何保證自己起的常量名、函數(shù)名、類名不會(huì)和別人起的名字出現(xiàn)重名的狀況?

2、我們要用到別人開發(fā)的框架時(shí),要如何保證自己起的常量名、函數(shù)名、類名不會(huì)和框架的常量名、函數(shù)名、類名出現(xiàn)重名的狀況?

為了解決這兩個(gè)問題,命名空間這項(xiàng)技術(shù)出現(xiàn)了。

<?PHP
namespace 命名空間名稱;

其實(shí)命名空間,說白了,就是給相同的常量、函數(shù)、類的名字前面添加不同的前綴,這樣它們的名字就不相同了。

舉例

<?php
namespace a; //命名空間 a
class ABC {
    public function __construct()
    {
        echo 123;
    }
}
namespace b; //命名空間 b
class ABC {
    public function __construct()
    {
        echo 456;
    }
}

不會(huì)報(bào)錯(cuò),因?yàn)檫@兩個(gè)類在不同的命名空間下,

在命名空間 a 下的類 ABC 名字已經(jīng)變成 \a\ABC,

在命名空間 b 下的類 ABC 名字已經(jīng)變成 \b\ABC。

當(dāng)一個(gè)文件內(nèi)有多個(gè)命名空間,當(dāng)前命名空間關(guān)鍵字namespace 到下個(gè)命名空間關(guān)鍵字namespace 之間的代碼都屬于當(dāng)前命名空間。

在當(dāng)前命名空間使用其它命名空間的代碼

<?php
namespace a;
class ABC {
    public function __construct()
    {
        echo 123;
    }
}
namespace b;
class ABC {
    public function __construct()
    {
        echo 456;
    }
}
namespace c;
new \a\ABC(); //在命名空間 c 中實(shí)例化命名空間 a 中的 ABC 類 ,輸出 123
/* 
因?yàn)楫?dāng)前代碼所在的命名空間是 c 命名空間, 而 a 命名空間是定義在根命名空間下,
所以在 c 命名空間使用 a 命名空間時(shí), a 命名空間前面要加一個(gè)反斜杠 \ ,這個(gè)反斜杠
代表根命名空間,如果沒有這個(gè)反斜杠,new a\ABC() 會(huì)以當(dāng)前命名空間 c 為開頭,
即 new \c\a\ABC(),會(huì)報(bào)錯(cuò)( Fatal error: Uncaught Error: Class 'c\a\ABC' not found )
因?yàn)?\c\a\ 這個(gè)命名空間下沒有 ABC 類
*/
new \b\ABC(); //在命名空間 c 中實(shí)例化命名空間 b 中的 ABC 類 ,輸出 456

到此這篇關(guān)于php命名空間舉例介紹使用方法的文章就介紹到這了,更多相關(guān)php命名空間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論