Fork me on GitHub

命名空间
关键字 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 可以正常使用

posted on 2019-03-21 08:37  anyux  阅读(182)  评论(0)    收藏  举报