php命名空間的使用詳解,php空間是什麼意思

本文目錄一覽:

PHP的命名空間使用方法,求寫實例

假設程序涉及文件的輸入和輸出,那麼就要引入system.io這樣一個命名空間。

命名空間的引入主要是為了寫程序時代碼書寫簡單。

比如說filestream這個類,他就是命名空間system.io下的一個類。如果不在文件開頭引入system.io這個命名空間,那麼在程序中用到這個類的時候就要寫成system.io.filestream,相反,如果已經引入了這個命名空間就可以直接寫filestream了。

命名空間就是將一類具有相似相關功能的類和接口等打包。

只要在文件的開頭寫上using

system.io;

就可以直接使用這個命名空間下的類。

thinkphp命名空間有什麼作用,怎麼使用

在php裡邊,同一個應用請求裡邊如果存在兩個方法(類名),他們的名字一樣(例如都是getName()),由於php本身語法規則的限制,系統是要報錯的

解決方法:

① 把他們的名字改為不一樣的 例如 agetName() bgetName()

② 通過命名空間解決

Yii 框架為了避免名字重複引起問題,同步的類前邊都有 C 字樣

1. 簡單應用

a) 命名空間是虛擬的定義空間,不是真實存在目錄

b) 命名空間的分隔符都是反斜杠 \

c) 非限定名稱:getName() 獲得與其最近的命名空間的getName()

d) 限定名稱:beijing\getName() 相對方式 通過最近的命名空間定位beijing\getName()

e) 完全限定名稱: \beijing\getName() 直接在指定的命名空間獲得具體元素

f) 命名空間針對:函數、類名、常量三者其作用,在命名空間裡邊把這三種統稱為元素

2、別名和導入

a) 導入/引入 use

b) 使用一個元素,使用非限定名稱,在當前最接近的空間裡邊獲得元素

c) 如果當前空間裡邊沒有指定元素,也可以在導入的空間裡邊尋找

3、公共空間

a) 第一種情況

b) 沒有使用namespace定義空間,當前空間就是一個公共空間

c) 例如一個有namespace的文件引入了一個沒有namespace的文件程序

d) 沒有namespace的文件空間就是公共空間

e) 在namespace文件裡邊可以通過\斜杠直接訪問公共空間元素

f) function getName(){} ——公共空間的元素

g) namespace beijing;

h) function getName(){} —–beijing空間的元素

i) 第二種情況

j) 當前文件沒有namespace、但是引入的文件有namespace

k) 當前文件就是公共空間,引入文件有自己空間

PHP 為什麼要使用命名空間,命名空間的作用

命名空間一個最明確的目的就是解決重名問題,PHP中不允許兩個函數或者類出現相同的名字,否則會產生一個致命的錯誤。這種情況下只要避免命名重複就可以解決,最常見的一種做法是約定一個前綴。

舉個栗子:項目中有兩個模塊:article和message board,它們各自有一個處理用戶留言的類Comment。之後我可能想要增加對所有用戶留言的一些信息統計功能,比如說我想得到所有留言的數量。這時候調用它們Comment提供的方法是很好的做法,但是同時引入各自的Comment類顯然是不行的,代碼會出錯,在另一個地方重寫任何一個Comment也會降低維護性。那這時只能重構類名,我約定了一個命名規則,在類名前面加上模塊名,像這樣:Article_Comment、MessageBoard_Comment

可以看到,名字變得很長,那意味着以後使用Comment的時候會寫上更多的代碼(至少字符多了)。並且,以後如果要對各個模塊增加更多的一些整合功能,或者是互相調用,發生重名的時候就需要重構名字。當然在項目開始的時候就注意到這個問題,並規定命名規則就能很好的避免這個問題。另一個解決方法可以考慮使用命名空間。

基礎

命名空間將代碼劃分出不同的空間(區域),每個空間的常量、函數、類(為了偷懶,我下邊都將它們稱為元素)的名字互不影響, 這個有點類似我們常常提到的『封裝’的概念。

創建一個命名空間需要使用namespace關鍵字,這樣:

複製代碼代碼如下:

?php

//創建一個名為’Article’的命名空間

namespace Article;

?

要注意的是,當前腳本文件的第一個命名空間前面不能有任何代碼,下面的寫法都是錯誤的:

複製代碼代碼如下:

//例一

//在腳本前面寫了一些邏輯代碼

?php

$path = “/”;

class Comment { }

namespace Article;

?

//例二

//在腳本前面輸出了一些字符

html/html

?php

namespace Article;

?

為什麼要說第一個命名空間呢?因為同一腳本文件中可以創建多個命名空間。

下面我創建了兩個命名空間,順便為這兩個空間各自添加了一個Comment類元素:

複製代碼代碼如下:

?php

//創建一個名為’Article’的命名空間

namespace Article;

//此Comment屬於Article空間的元素

class Comment { }

//創建一個名為’MessageBoard’的命名空間

namespace MessageBoard;

//此Comment屬於MessageBoard空間的元素

class Comment { }

?

在不同空間之間不可以直接調用其它元素,需要使用命名空間的語法:

複製代碼代碼如下:

?php

namespace Article;

class Comment { }

namespace MessageBoard;

class Comment { }

//調用當前空間(MessageBoard)的Comment類

$comment = new Comment();

//調用Article空間的Comment類

$article_comment = new \Article\Comment();

?

可以看到,在MessageBoard空間中調用article空間里的Comment類時,使用了一種像文件路徑的語法: \空間名\元素名

除了類之外,對函數和常量的用法是一樣的,下面我為兩個空間創建了新的元素,並在MessageBoard空間中輸出了它們的值。

複製代碼代碼如下:

?php

namespace Article;

const PATH = ‘/article’;

function getCommentTotal() {

return 100;

}

class Comment { }

namespace MessageBoard;

const PATH = ‘/message_board’;

function getCommentTotal() {

return 300;

}

class Comment { }

//調用當前空間的常量、函數和類

echo PATH; ///message_board

echo getCommentTotal(); //300

$comment = new Comment();

//調用Article空間的常量、函數和類

echo \Article\PATH; ///article

echo \Article\getCommentTotal(); //100

$article_comment = new \Article\Comment();

?

然後我的確得到了Article空間的元素數據。

子空間

命名空間的調用語法像文件路徑一樣是有道理的,它允許我們自定義子空間來描述各個空間之間的關係。

php 命名空間是什麼意思

從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統中目錄用來將相關文件分組,對於目錄中的文件來說,它就扮演了命名空間的角色。PHP 命名空間提供了一種將相關的類、函數和常量組合到一起的途徑。

具體舉個例子,文件foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 文件。另外,在目錄 /home/greg 外訪問 foo.txt 文件時,我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。這個原理應用到程序設計領域就是命名空間的概念。

在PHP中,命名空間用來解決在編寫類庫或應用程序時創建可重用的代碼如類或函數時碰到的兩類問題:

用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。

為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/239131.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:14
下一篇 2024-12-12 12:15

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25

發表回復

登錄後才能評論