php命名空間舉例介紹使用方法
命名空間是為了解決當(dāng)前文件內(nèi)相同作用域內(nèi)常量名之間、函數(shù)名之間、類名之間的命名沖突。
在 PHP 中變量名是不會沖突的,在相同作用域內(nèi),對于同一個變量,最后一個變量會取代前一個變量的值。
舉例
同一作用域,相同變量
<?php $a = '123'; $a = '456'; $a = '789'; echo $a; //顯示 789
代碼編輯器不報錯,PHP運行結(jié)果不報錯,顯示最后一個 $a 的值。
同一作用域,相同常量
<?php const a = '123'; const a = '356'; const a = '789'; echo a //顯示 123
代碼編輯器報錯,PHP運行結(jié)果不報錯,顯示第一個常量 a 的值。
常量換成 define 定義
<?php
define('a',123);
define('a',456);
define('a',789);
echo a; //顯示 123代碼編輯器報錯,PHP運行結(jié)果不報錯,顯示第一個常量 a 的值,和 const 定義常量的結(jié)果一樣。
同一作用域,相同函數(shù)
<?php
function a(){
echo '123';
}
function a(){
echo '456';
}
a(); // PHP 運行結(jié)果報錯 Cannot redeclare a()代碼編輯器報錯,PHP 運行結(jié)果報錯。
同一作用域,相同類
<?php
class A{
public function __construct()
{
echo '123';
}
}
class A{
public function __construct()
{
echo '456';
}
}
new A(); // PHP 運行結(jié)果報錯
//Fatal error: Cannot declare class A, because the name is already in use in代碼編輯器報錯,PHP 運行結(jié)果報錯。
在編程中,如果代碼全都是自己一個人完成的,常量名之間、函數(shù)名之間、類名之間可能不會出現(xiàn)重名的情況,但是在實際的工作中,
1、大多數(shù)任務(wù)都是需要團(tuán)隊協(xié)作來完成,我們要如何保證自己起的常量名、函數(shù)名、類名不會和別人起的名字出現(xiàn)重名的狀況?
2、我們要用到別人開發(fā)的框架時,要如何保證自己起的常量名、函數(shù)名、類名不會和框架的常量名、函數(shù)名、類名出現(xiàn)重名的狀況?
為了解決這兩個問題,命名空間這項技術(shù)出現(xiàn)了。
<?PHP namespace 命名空間名稱;
其實命名空間,說白了,就是給相同的常量、函數(shù)、類的名字前面添加不同的前綴,這樣它們的名字就不相同了。
舉例
<?php
namespace a; //命名空間 a
class ABC {
public function __construct()
{
echo 123;
}
}
namespace b; //命名空間 b
class ABC {
public function __construct()
{
echo 456;
}
}不會報錯,因為這兩個類在不同的命名空間下,
在命名空間 a 下的類 ABC 名字已經(jīng)變成 \a\ABC,
在命名空間 b 下的類 ABC 名字已經(jīng)變成 \b\ABC。
當(dāng)一個文件內(nèi)有多個命名空間,當(dāng)前命名空間關(guān)鍵字namespace 到下個命名空間關(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 中實例化命名空間 a 中的 ABC 類 ,輸出 123
/*
因為當(dāng)前代碼所在的命名空間是 c 命名空間, 而 a 命名空間是定義在根命名空間下,
所以在 c 命名空間使用 a 命名空間時, a 命名空間前面要加一個反斜杠 \ ,這個反斜杠
代表根命名空間,如果沒有這個反斜杠,new a\ABC() 會以當(dāng)前命名空間 c 為開頭,
即 new \c\a\ABC(),會報錯( Fatal error: Uncaught Error: Class 'c\a\ABC' not found )
因為 \c\a\ 這個命名空間下沒有 ABC 類
*/
new \b\ABC(); //在命名空間 c 中實例化命名空間 b 中的 ABC 類 ,輸出 456到此這篇關(guān)于php命名空間舉例介紹使用方法的文章就介紹到這了,更多相關(guān)php命名空間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
學(xué)習(xí)php設(shè)計模式 php實現(xiàn)觀察者模式(Observer)
這篇文章主要介紹了php設(shè)計模式中的觀察者模式,使用php實現(xiàn)觀察者模式,感興趣的小伙伴們可以參考一下2015-12-12
淺析php fwrite寫入txt文件的時候用 \r\n不能換行的問題
以下是對php中fwrite寫入txt文件的時候用 \r\n不能換行的問題進(jìn)行了介紹,需要的朋友可以過來參考下2013-08-08
thinkphp 字母函數(shù)詳解T/I/N/D/M/A/R/U
下面小編就為大家?guī)硪黄猼hinkphp 字母函數(shù)詳解T/I/N/D/M/A/R/U。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
PHP的Yii框架中過濾器相關(guān)的使用總結(jié)
這篇文章主要介紹了PHP的Yii框架中過濾器相關(guān)的使用總結(jié),文中列舉了一些常用的核心過濾器,需要的朋友可以參考下2016-03-03

