佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > php命名空間設(shè)計(jì)思想、用法與缺點(diǎn)分析

php命名空間設(shè)計(jì)思想、用法與缺點(diǎn)分析

熱門標(biāo)簽:Mysql連接數(shù)設(shè)置 科大訊飛語音識(shí)別系統(tǒng) 電子圍欄 服務(wù)器配置 Linux服務(wù)器 阿里云 銀行業(yè)務(wù) 團(tuán)購網(wǎng)站

本文實(shí)例講述了php命名空間設(shè)計(jì)思想、用法與缺點(diǎn)。分享給大家供大家參考,具體如下:

相比C#等語言,你可以在php函數(shù)里面隨意定義變量并賦值,而不用擔(dān)心覆蓋了全局變量,或者類變量;你也可以隨意的定義類變量,而不用擔(dān)心會(huì)和函數(shù)名沖突,因?yàn)樽兞壳懊娑加袀€(gè)$。

php的命名空間和全局變量、局部變量的設(shè)計(jì)思想一樣,都是為了盡可能的減少命名沖突。php的命名空間可以和文件系統(tǒng)類似,有相對(duì)命名空間和絕對(duì)命名空間。

定義命名空間

必須是第一個(gè)語句,前面不能有任何語句,注釋可以。
必須是絕對(duì)命名空間。

namespace bookrpg\config;
//或者
namespace bookrpg\config
{
}
namespace \bookrpg\config; //錯(cuò)誤,不能有前導(dǎo)\


導(dǎo)入命名空間

必須是絕對(duì)命名空間。

use bookrpg\config\ClassName;
use \bookrpg\config\ClassName; //可以有前導(dǎo)\,但不建議加
use bookrpg\config\ClassName as NewClassName;
use Exception;
use \Exception; //可以有前導(dǎo)\,但不建議加

使用命名空間

使用絕對(duì)命名空間

$cls = new \bookrpg\config\ClassName();
class MyException extends \Exception
{
}

使用相對(duì)命名空間

namespace bookrpg
{
  //等同于new \bookrpg\config\ClassName();
  $cls = new config\ClassName();
  //錯(cuò)誤,php會(huì)認(rèn)為是\bookrpg\Exception,而不是全局類Exception
  $ex = new Exception();
}

怪異的地方

C++、Java、C#都有相似的命名空間概念,而php的命名空間不跟隨大流,有自己的一套獨(dú)立的思想,對(duì)于先入為主的人來來說就顯得怪異和令人迷惑。

  1. 命名空間中居然有反斜杠?

    點(diǎn)號(hào)(.)已經(jīng)被用作字符串連接符了,又要區(qū)分絕對(duì)和相對(duì)命名空間,new .a.b.c()太不美觀,所以選擇反斜杠吧。

  2. 一旦使用了命名空間,使用全局類也要加上“\”或者use一下,累不累呀?

    沒辦法,為了嚴(yán)格類比文件系統(tǒng)的概念,也為了隨便定義類名,而不用擔(dān)心類名沖突。

  3. 既然是嚴(yán)格類比文件系統(tǒng),為什么定義和導(dǎo)入命名空間的時(shí)候,前面不加\呢?

    只能說,php的設(shè)計(jì)者不是完美主義者。

但php的命名空間確實(shí)缺乏邏輯完美性:

  • 前導(dǎo)\的使用不統(tǒng)一,同樣是絕對(duì)命名空間,定義的時(shí)候不允許用,導(dǎo)入的時(shí)候卻允許用。
  • 即使是全局類,在非全局命名空間下,也必須使用前導(dǎo)\,而全局函數(shù)和變量又不受此限制。

使用建議

  • 定義和導(dǎo)入命名空間的時(shí)候,統(tǒng)一不加前導(dǎo)\
  • 所有的類都使用use導(dǎo)入,包括全局類,只命名空間類,有沖突的就as一下
  • 禁止直接使用相對(duì)命名空間

理解了php命名空間的設(shè)計(jì)思想,并避免其設(shè)計(jì)不完美的地方,這樣看來php的命名空間也是很容易接受的。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • php的命名空間與自動(dòng)加載實(shí)現(xiàn)方法
  • PHP命名空間定義與用法實(shí)例分析
  • PHP進(jìn)階學(xué)習(xí)之命名空間基本用法分析
  • PHP中命名空間的使用例子
  • 實(shí)例講解PHP中使用命名空間
  • PHP命名空間簡單用法示例
  • PHP命名空間與自動(dòng)加載類詳解
  • PHP命名空間namespace及use的簡單用法分析
  • 如何理解PHP核心特性命名空間

標(biāo)簽:大理 棗莊 廣元 蚌埠 萍鄉(xiāng) 衡水 衢州 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php命名空間設(shè)計(jì)思想、用法與缺點(diǎn)分析》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    岳阳县| 南召县| 察哈| 苏州市| 调兵山市| 永昌县| 宣武区| 花莲县| 云龙县| 伊通| 朝阳市| 于都县| 蕉岭县| 买车| 和静县| 疏附县| 陈巴尔虎旗| 腾冲县| 收藏| 富源县| 思南县| 攀枝花市| 洞口县| 比如县| 贵港市| 芦溪县| 新竹县| 台山市| 安庆市| 西青区| 拉萨市| 岳西县| 宣汉县| 兴和县| 鄢陵县| 准格尔旗| 平阴县| 保康县| 梅州市| 汉源县| 白沙|