PHP命名空間及命名空間與文件路徑的關(guān)系

1、命名空間的引入原因

命名空間的引入是為了解決變量或者函數(shù)的名字沖突;

舉個(gè)例子來說,

對(duì)于文件A.php 、B.php 和C.php 這三個(gè)文件;

A.php 文件中 有變量定義為 $a=1;

B.php 文件中 有變量定義為 $a=1;

文件 C.php 中 引用 A 、B文件,并使用 變量 $a;

那么C.php中會(huì)使用何值?

2、關(guān)于同名變量中值的定義

此時(shí)系統(tǒng)不會(huì)出現(xiàn)任何錯(cuò)誤;但會(huì)出現(xiàn)下列問題:

一、include “a.php”;

? ? ? include "b.php"

則使用的是b.php 中定義值;

二、include "b.php";

? ? ? include "a.php";

則使用的是a.php 中的定義值;

由此可見,文件引入的順序不同,變量的定義值完全不同。采用的覆蓋的原則;因此具有變量值的不確定性。

3、命名空間的本質(zhì)

PHP 命名空間可以解決以下兩類問題:

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

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

命名空間的本質(zhì)還是一個(gè)標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符用來作為容器,來標(biāo)識(shí)該代碼空間下的所有內(nèi)容。

在被引用的PHP 文件中引入了命名空間之后,如果應(yīng)用部分未使用空間名稱,會(huì)直接造成變量無法解析。因?yàn)榇藭r(shí)的變量名稱已經(jīng)改變了,全稱應(yīng)該是空間名+本地變量名稱。

4、命名空間與文件路徑的關(guān)系

<?php

header("Content-type:text/html;charset=utf-8");

include_once "./modelA/a.php";

include_once "./modelB/a.php";

use modelA\a;

use modelB\a as b;

a::out();

echo "<br/>";

$b = new b();

$b->out();

---------------------

在這種方法中,需要使用iniclude_once()方法引入文件,也需要使用命名空間。可能有些人會(huì)認(rèn)為:不是已經(jīng)使用use modelA\a了嗎,那就應(yīng)該把文件引入進(jìn)來了,為什么還要include_once()一下呢?那是因?yàn)閡se modelA\a僅僅是聲明要使用modelA命名空間下的a文件,可以理解為邏輯上的使用,為了防止重名。而include_once()則是物理上的使用,將代碼導(dǎo)入到c.php中。use 和 include缺一不可。

---------------------

Laravel?采用?classmap?方式進(jìn)行自動(dòng)加載(autoload),PHP雖然有了命名空間這個(gè)高級(jí)特性,但是這只是邏輯關(guān)系,require?文件還是要有的。

這個(gè)類和文件的對(duì)應(yīng)關(guān)系就存在?/vendor/composer/autoload_classmap.php?,每次?composer?dump-autoload?都會(huì)重新編譯、生成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,719評(píng)論 0 3
  • 此文記錄自己學(xué)習(xí)PHP和mySQL的過程。之前在網(wǎng)上簡單地學(xué)習(xí)了一下這兩門語言,并且自己編寫了PHP,可以正常連接...
    阿木林_李閱讀 2,823評(píng)論 1 2
  • 一、 為什么需要命名空間(問題提出) 命名空間是ANSIC++引入的可以由用戶命名的作用域,用來處理程序中 常見的...
    IvanRunning閱讀 2,390評(píng)論 0 2
  • Php:腳本語言,網(wǎng)站建設(shè),服務(wù)器端運(yùn)行 PHP定義:一種服務(wù)器端的HTML腳本/編程語言,是一種簡單的、面向?qū)ο?..
    廖馬兒閱讀 2,167評(píng)論 2 38
  • 在C語言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,401評(píng)論 0 2