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

首頁 > 開發 > PHP > 正文

PHP中的命名空間相關概念淺析

2024-05-04 23:30:22
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP中的命名空間相關概念淺析,從廣義上來說,命名空間是一種封裝事物的方法,在很多地方都可以見到這種抽象概念,需要的朋友可以參考下
 

1. PHP中的命名空間是什么?

什么是命名空間?“從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統中目錄用來將相關文件分組,對于目錄中的文件來說,它就扮演了命名空間的角色。具體舉個例子,文件 foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 文件。另外,在目錄 /home/greg 外訪問 foo.txt 文件時,我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。這個原理應用到程序設計領域就是命名空間的概念。”——命名空間概述

2. PHP命名空間該如何理解?

從本質上講,命名空間就是一個容器,這個容器內我們可以放入類、函數和變量,他們在同一命名空間內可以無條件相互訪問。在命名空間之外,就必須引用或者導入其他命名空間,才能調用它們包含的這些項。

命名空間跟shell中的文件目錄的概念是一樣一樣的。在當前目錄下可以直接用文件名訪問所有文件,如果需要訪問其他目錄下的文件,就需要輸入相對路徑或絕對路徑。

引用方式:

復制代碼代碼如下:

namespace foo;
 class Foo {   
         public function foo()   
             {        
                  return /top/namespace/bar/Bar::fuck();    
              }
             }

導入方式:
復制代碼代碼如下:

namespace foo; 
use top/namespace/bar/Bar; 
 class Foo {
        public function foo() 
            {        return Bar::fuck();  
            }
           }

 

導入就相當于將目的類復制一份到當前命名空間中。

3. PHP命名空間有何實際應用?

命名空間的存在是為了解決下面兩個問題:

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

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

4. 一些tips

1. 同一個空間下的類直接相互直接調用,屬于一家。例如 Laravel 中的 PageController 類中可以直接寫 Page::all() 這樣的代碼來調用 Page 這個model,因為他們倆都在頂級命名空間下。

2. 若一個類存在于非頂級命名空間中,那么它只能在調用同樣是當前命名空間下的其他類才不用“引用”或“導入”,它們屬于一家。任何子命名空間都是另一個命名空間,另一個容器,沒有除了容器之間關系之外的任何特殊關系。

3. Laravel 采用 classmap 方式進行自動加載(autoload),PHP雖然有了命名空間這個高級特性,但是這只是邏輯關系,require 文件還是要有的。這個類和文件的對應關系就存在 /vendor/composer/autoload_classmap.php ,每次 composer dump-autoload 都會重新編譯、生成。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌什县| 横山县| 广河县| 海林市| 永宁县| 财经| 太保市| 万盛区| 高清| 桓台县| 依兰县| 阜新| 墨脱县| 呼玛县| 沛县| 杭锦旗| 绍兴市| 永定县| 如皋市| 霍林郭勒市| 紫金县| 宜阳县| 夏邑县| 阳谷县| 桦川县| 通榆县| 怀远县| 灵山县| 文化| 伊金霍洛旗| 海原县| 新泰市| 玉门市| 如东县| 宿迁市| 鄂托克前旗| 福海县| 景德镇市| 扶绥县| 三门县| 九江市|