1.PHP 命名空間可以解決以下兩類問題:
1.用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
2.為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,以提高源代碼的可讀性。
<?php
const NAME='1234';
$name='abcd';
include 'demo5.php';
echo NAME;
echo $name;//常量不會被覆蓋,變量會被覆蓋,所以常量會出現沖突
命名空間(可以理解為創建文件夾)
定義:命名空間namespace,是指人為的將內存進行分隔,讓不同內存區域的同名結構共存,從而解決在大型項目中可能出現的重名結構的問題
語法:namespace 空間名
作用:不同的空間可以有同名的結構,如:類
空間元素:函數,常量,類,不包括變量!!
子空間(子文件夾)
語法:
?namespace 空間名
?namespace 空間名\子空間
????????命名空間訪問 (url)
非限定名稱訪問:直接訪問空間元素的名字(只訪問自己命名空間的元素)
限定名稱訪問:使用自己當前的子空間名字+ \ + 元素名字
完全限定名稱訪問:\ + 全局空間 + \ ?+ ?元素名字
注:1.任何空間元素訪問,只針對函數,類,常量? ? ? ?2.全局空間(C盤)
3.如果定義了命名空間,非限定名稱的尋找系統常量的方式:
首先:在自己的空間內找
然后:如果找不到元素
系統常量-->進入全局空間尋找
系統類 --> 不會自動進入全局空間尋找,而是會報錯
<?php
namespace mydemo;
const NAME='123';function getname(){return 'getNAME';
}
class Dog{static function dog(){return 'dog';}
}
//他的子命名空間 namespace mydemo\b
echo NAME;//非限定名稱訪問
echo b/NAME;//限定名稱訪問
echo \mydemo\NAME ;//完全限定名稱訪問
echo \mydemo\b\NAME ;
echo \mydemo\b\Dog::dog() ;
2.命名空間的引入
1.空間引入方式:use關鍵字
1. 引入類:use 空間名\類名
2. 引入函數:use function 空間名\函數名
3. 引入常量:use const 空間名\常量名
2.當引入元素時重名,通過 as 來起別名
????use 空間名\類名 as 別名
3.引入多個元素
use 空間名\{
類名,
function 函數名,
const 常量
} ??
4. 引入空間?
????use 空間名
ues mydemo\b as a;
echo a\NAME;