您当前的位置: 首页 > 学无止境 > 网站建设 网站首页网站建设
php5.3后新增命名空间
发布时间:2017-06-10 15:25:41编辑:雪饮阅读()
命名空间概念于php5.3以后出现
命名空间又叫名字空间
常量、函数、类这三者不允许重复定义
在php5.3之前项目合并时为了避免冲突,采用匈牙利命名(下划线_)和驼峰命名混合使用
命名空间示例1:
<?php
//声明当前命名空间
//语法:
//namespace 命名空间名称
namespace myself;
function var_dump($a){
echo $a;
}
//使用当前命名空间中的var_dump函数
var_dump(100);
//使用全局的var_dump函数
\var_dump(100);
?>
如果当前脚本中有include包含其它脚本,则其它脚本中同样的函数也不属于当前命名空间的,可以通过"\"全局调用
命名空间语句前不能有任何代码(除非declare(encoding="utf-8");函数),并且使用命名空间的php脚本中在"<?php ?>"的“<”前面也不能有任何代码,包括空格都不能有
命名空间示例2:子命名空间的命名与
<?php
namespace myself\sq;
const aaa=1;
echo \myself\sq\aaa;
?>
定义多个命名空间,以最后一个为主(同一文件中声明的多个)
命名空间示例3:单个脚本命名声明多个命名空间并访问多个命名空间
<?php
namespace myself\sq;
const aaa=1;
namespace myself\sq2;
const aaa=2;
//输出多个命名空间
echo \myself\sq\aaa."<br/>";
echo \myself\sq2\aaa;
?>
命名空间示例4:单个脚本命名声明多个命名空间并访问多个命名空间(推荐用法)
<?php
namespace myself\sq {
const aaa=1;
}
namespace myself\sq2 {
const aaa=2;
//输出多个命名空间
echo \myself\sq\aaa."<br/>";
echo \myself\sq2\aaa;
}
?>
注意:使用该方式声明命名空间,则不能在大括号外面声明普通的全局变量了。
命名空间示例5:命名空间中的第二种调用全局函数的方法
<?php
namespace myself\sq {
const aaa=1;
}
namespace myself\sq2 {
const aaa=2;
//输出多个命名空间
echo \myself\sq\aaa."<br/>";
echo \myself\sq2\aaa;
}
//调用全局函数
namespace{
var_dump(100);
}
?>
命名空间名称解析规则:
namespace duminjie
这是一种非限定名称
namespace duminjie\gaojiupan
这是一种限定名称
namespace \duminjie\gaojiupan
这是一种完全限定名称
命名空间示例6:命名空间中使用动态函数
<?php
namespace meizi;
function demo(){
echo "111";
}
//未使用命名空间之前动态函数的使用(此时由于开启了命名空间,所以会报错)
//$fun="demo";
//$fun();
//使用命名空间之后动态函数的使用(必须用限定名称)
$fun="\meizi\demo";
$fun();
?>
注意:对于变化的动态元素都要使用限定名称
命名空间示例7:获取当前命名空间名称
<?php
namespace meizi;
function demo(){
echo "111";
}
echo __NAMESPACE__;
?>
命名空间示例8:调用当前命名空间下元素的另种方法
<?php
namespace meizi;
function demo(){
echo "111";
}
namespace\demo();
?>
命名空间示例8:给命名空间起别名并用别名访问
<?php
namespace xueyin\yu\dujiejie;
use xueyin\yu\dujiejie as xyydjj;
function demo(){
echo "111";
}
xyydjj\demo();
?>
命名空间示例9:命名空间别名的另类方式
<?php
namespace xueyin\yu\dujiejie;
use xueyin\yu\dujiejie;
function demo(){
echo "111";
}
dujiejie\demo();
?>
命名空间示例10:导入类
<?php
namespace xueyin\yu\dujiejie;
include "cs2.php";
use xueyin\yu\dujiejie;
use \Xy; //导入一个全局类
Xy::demo();
?>
关键字词:php,命名空间