1.子命名空间定义
PHP提供了层次化的空间命名方式,类似于一个虚拟目录,tp5会自动加载该命名空间
<?php
namespace app1\pro1\item1;
function func(){
echo "func1";
}
const x = "name1";
2.命名空间的三种访问方式
1)非限定名称访问
访问的元素前面不包含前缀,即访问当前定义的元素。
2)限定名称访问
访问的元素包含前缀名称,简单理解使用虚拟目录的相对路径访问方式
3)完全限定名称访问
访问的元素包含全局的命名空间前缀,理解为使用虚拟目录的绝对路径访问
举例说明:
<?php
namespace app1\pro1\item1; //命名空间前不能有有效代码
header("content-type:text/html;charset=utf-8");
function func(){
echo "func1";
}
const x = "name1";
class Fruit{
public $a = '苹果1';
static $b = '菠萝1';
}
namespace app2\pro2\item2\topic2;
function func(){
echo "func2";
}
const x = "name2";
class Fruit{
public $a = '苹果2';
static $b = '菠萝2';
}
namespace app2\pro2;
function func(){
echo "func3";
}
const x = "name3";
class Fruit{
public $a = '苹果3';
static $b = '菠萝3';
}
// 非限定名称访问,访问当前定义的元素
func(); //输出“func3”
echo x; //name3
$fruit = new Fruit;//实例化类
echo $fruit->a; //苹果3
echo Fruit::$b; //菠萝3
// 限定名称访问,访问当前定义元素下面的item2\topic2路径下的元素
item2\topic2\func(); //输出“func2”
echo item2\topic2\x; //name2
$fruit = new item2\topic2\Fruit;//实例化类
echo $fruit->a; //苹果2
echo item2\topic2\Fruit::$b; //菠萝2
//完全限定名称访问
\app1\pro1\item1\func(); //输出“fun1”
echo \app1\pro1\item1\x; //name1
$fruit = new \app1\pro1\item1\Fruit;//实例化类
echo $fruit->a; //苹果1
echo \app1\pro1\item1\Fruit::$b; //菠萝1