命名空间
关键字 namespace
命名空间的名字是虚拟出的,并不一定实际存在,tp很巧妙地利用了命名空间与自动加载技术,引入命名空间下的类等内容
定义###
只对函数,类,及const定义的常量生效,其他数据类型不生效
namespace kj1;
$bj=1;
const MN = 'tongpan';
function getmessage()
{
echo "123";
}
class Animals(){
public $obj = 'dog';
}
namespace kj2;
$bj=2;
const MN = 'bj';
function getmessage()
{
echo "456";
}
class Animals(){
public $obj = 'pig';
}
echo \kj1\$bj;
使用###
默认使用,距离函数,类,及const定义的常量最近的值
指定使用命名空间中的函数
\kj1\getmessage();
#\代表根路径
指定使用命名空间中的常量
echo \kj1\MN;
提示:变量不能在命令空间中使用
多级命名空间及三种访问方式
<?php
namespace bj\hd; #提示:命名空间前,不能有任何输出
header("Content-Type:text/html;charset=utf-8");
const SHZ = '素还真';
function get_msg()
{
echo '叶小钗';
}
class CG
{
public $age=300;
static $name=SHZ;
}
namespace sh\pt;
const SHZ = '一叶书';
function get_msg()
{
echo '一线生';
}
class CG
{
public $age=500;
static $name=SZH;
}
get_msg(); #1、非限定名称访问方式
echo SHZ; #1、非限定名称访问方式
echo '<hr>';
\bj\hd\get_msg(); #2、完全限定名称访问方式
echo \bj\hd\SHZ; #2、完全限定名称访问方式 特征:从根路开始查找
$cg = new \bj\hd\CG();
echo $cg->age; #提示: 类中的变量,对象引用使用时前面不加$符号
echo \bj\hd\CG::$name; #提示: 类中的静态变量,类引用时,静态变量前面必须添加$符号
echo '<hr>';
bj\hd\get_msg(); #3、限定名称访问,从当前名称空间下,开始查找
namespace sh\pt\bj\hd;
function get_msg()
{
echo "我是限定名称访问";
}
多级命名空间访问方式与一级命名空间访问方式相同。
使用use引入命名空间
namespace bj\hd;
header("Content-Type:text/html;charset=utf-8");
const SHZ = '素还真';
function get_msg()
{
echo '叶小钗';
}
class CG
{
public $age=300;
static $name=SHZ;
}
namespace sh\pt;
const SHZ = '一叶书';
function get_msg()
{
echo '一线生';
}
class CG
{
public $age=500;
static $name=SZH;
}
use bj\hd;
echo hd\SHZ;
hd\get_msg();
$cg = new hd\CG();
echo $cg->age;
echo hd\CG::$name;
提示:使用use只能引入类,常量,函数无法引入
引入空间类元素
namespace bj\hd;
header("Content-Type:text/html;charset=utf-8");
const SHZ = '素还真';
function get_msg()
{
echo '叶小钗';
}
class CG
{
public $age=300;
static $name=SHZ;
}
namespace sh\pt;
const SHZ = '一叶书';
function get_msg()
{
echo '一线生';
}
class CG
{
public $age=500;
static $name=SZH;
}
use bj\hd\CG as CGA;
$cg = new CGA();
echo $cg->age;
echo CGA::$name;
提示:因类名CG重名,使用as 修改为CGA 可以正常使用
浙公网安备 33010602011771号