国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

命名空間

2019-11-15 02:04:59
字體:
來源:轉載
供稿:網友
命名空間 - php手冊筆記概述

命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念,比如在操作系統中,目錄用來將相關文件分組,對于目錄中的文件來說,目錄就扮演了命名空間的角色。這個原理應用到程序設計領域就是命名空間的概念。PHP 5.3后的版本開始支持命名空間。

定義命名空間

命名空間通過關鍵字namespace來聲明。任何合法的PHP代碼都可以包含在命名空間中,但只有類、函數和常量這三種類型受命名空間的影響。

在聲明命名空間之前唯一合法的代碼是用于定義源文件編碼方式的declare語句。命名空間必須是程序腳本的第一條語句,所有非 PHP 代碼包括空白符都不能出現在命名空間的聲明之前。同一個命名空間可以定義在多個文件中。

定義子命名空間

與目錄和文件的關系相似,PHP也允許指定層次化的命名空間。

在同一個文件中定義多個命名空間

PHP支持這種語法,但不提倡使用。在同一個文件中定義多個命名空間有兩種語法形式:一種是簡單的上下羅列,一種是使用大括號形式的語法。建議使用第二種。

<?php declare(encoding = 'UTF-8');namespace MyPRoject {/* MyProject */}namespace {/* global */}

將全局的非命名空間中的代碼與命名空間中的代碼組合在一起,只能使用大括號形式的語法。

使用命名空間:基礎

要使用命名空間,必須了解PHP是如何知道要使用哪一個命名空間中的元素的。

在文件系統中,訪問一個文件有三種方式:

  • 相對文件名形式
  • 相對路徑名形式
  • 絕對路徑名形式

與文件系統相似,在PHP命名空間中,類名可以通過三種方式引用,需要了解一下命名空間名稱定義:

  • 非限定名稱,不包含前綴的類名稱。名稱中不包含命名空間分隔符的標識符。例如Foo
  • 限定名稱,包含前綴的名稱,名稱中含有命名空間分隔符的標識符。例如Foo/Bar
  • 完全限定名稱,包含了全局前綴操作符的名稱。名稱中包含命名空間分隔符,并一命名空間分隔符開始的標識符。例如/Foo/Barnamespace/Foo也是一個完全限定名稱。
命名空間和動態語言特征

命名空間的實現受到語言自身的動態特征的影響,有時必須使用完全限定名稱。

namespace關鍵字和__NAMESPACE__常量

常量__NAMESPACE__的值是包含當前命名空間名稱的字符串。在全局的,不包括在任何命名空間中的代碼,它包含一個空的字符串。常量__NAMESPACE__在動態創建名稱時很有用。

關鍵字namespace可用來顯式訪問當前命名空間或子命名空間中的元素。它等價于類中的self操作符。

使用命名空間:別名/導入

允許通過別名引用或導入外部的完全限定名稱,類似于在類unix文件系統中可以創建對其它的文件或目錄的符號連接。

PHP命名空間支持兩種別名或導入方式:

  • 為類名稱使用別名
  • 為命名空間名稱使用別名

使用use操作符導入或使用別名,支持一行包含多個use語句。注意對命名空間中的名稱,前導的反斜杠是不必要的也不允許有反斜杠,因為導入的名稱必須是完全限定的,不會根據當前的命名空間作相對解析。

全局空間

若未定義任何命名空間,所有的類與函數的定義都是在全局空間。在名稱前加上前綴/,表示該名稱是全局空間中的名稱。

使用命名空間:后備全局函數/常量

在命名空間中,當PHP遇到一個非限定的類、函數或常量名稱時,將會使用不同的有線策略來解析該名稱。

類名稱總是解析到當前命名空間中的名稱,因此在訪問系統內部或不包含在命名空間中的類名稱時,必須使用完全限定名稱。

對于函數和常量來說,如果當前命名空間中不存在該函數或常量,PHP 會退而使用全局空間中的函數或常量。

名稱解析規則

名稱解析規則文字挺多的,需要具體問題具體分析。

(全文完)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀来县| 大冶市| 西宁市| 子长县| 武安市| 区。| 三亚市| 扎囊县| 邹城市| 齐齐哈尔市| 宕昌县| 东乡| 鄂温| 连平县| 延津县| 朝阳县| 皋兰县| 铜梁县| 天台县| 淳化县| 巴彦淖尔市| 房产| 赣榆县| 文昌市| 淳化县| 泸州市| 罗平县| 治多县| 威信县| 南澳县| 平原县| 界首市| 博乐市| 巴马| 通州市| 三穗县| 南漳县| 鹤庆县| 大荔县| 吉木萨尔县| 藁城市|