命名空间是一中封装(类)对象的方法,类似于操作系统中的目录概念,命名空间作用于类、对象、函数、const定义的常量,普通变量、define定义的常量不受命名空间的约束。
主要是为了避免不必要的同名冲突。
A.php的内容:
<?php
namespace HaoR;
class BaseObj{
private $name="";
public function __construct(string $name){
$this->name=$name;
}
public function GetName(){
return $this->name;
}
}
$AppName="应用名称A";
const APPTYPE="类型A";
define("APPNAME","应用A");//全局定义
function GetInfo(){
return "HaoR的信息输出";
}
?>
B.php的内容:
<?php
namespace Dawn;
class BaseObj{
private $name="";
public function __construct(string $name){
$this->name=$name;
}
public function GetName(){
return $this->name;
}
}
$AppName="应用名称B";
const APPTYPE="类型B";
// define("APPNAME","应用B");//全局定义
function GetInfo(){
return "Dawn的信息输出";
}
?>
这个时候要引用这两个文件,因为类名、函数名、常量名相同,那么要使用命名空间来进行区分。
<?php
include "A.php";
include "B.php";
echo (new \HaoR\BaseObj('数学'))->GetName();
echo "<hr/>";
echo \HaoR\GetInfo();
echo "<hr/>";
echo \HaoR\APPTYPE;
echo "<hr/>";
echo $AppName;
echo "<hr/>";
echo (new \HaoR\BaseObj('物理'))->GetName();
echo "<hr/>";
echo \Dawn\GetInfo();
echo "<hr/>";
echo \Dawn\APPTYPE;
echo "<hr/>";
echo $AppName;
echo "<hr/>";
?>
输出:
还可以使用简写方式。
<?php
include "A.php";
include "B.php";
use \HaoR\BaseObj as MM;
use function \HaoR\GetInfo as NN;
use const \HaoR\APPTYPE as KK;
echo (new MM('数学'))->GetName();
echo "<hr/>";
echo NN();
echo "<hr/>";
echo KK;
echo "<hr/>";
echo $AppName;
echo "<br>--------------------------------------------<hr/>";
echo (new \HaoR\BaseObj('物理'))->GetName();
echo "<hr/>";
echo \Dawn\GetInfo();
echo "<hr/>";
echo \Dawn\APPTYPE;
echo "<hr/>";
echo $AppName;
echo "<hr/>";
?>
也不影响结果的输出,只是这样麻烦,还是在命名的时候多注意一点更好。