博主信息
博文 17
粉丝 0
评论 0
访问量 15386
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
命名空间
指纹指恋的博客
原创
928人浏览过

PHP中命名空间的由来

命名空间是PHP5.3以后才有的,这个概念在C#中很早就有了,PHP中的命名空间概念其实和C#中的是一样的。

什么是命名空间

从广义上来说,命名空间是一种封装事物的方法,在很多地方都可以见到这种概念,例如:在操作系统中,目录用来将文件分组,对于目录中的文件来说,它就扮演了命名空间的角色;

举个例子:文件foo.txt可以同时存在 /home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个foo.txt文件,另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分割符放在文件名之前得到 /home/greg/foo.txt 。这个原理应用到程序设计领域就是明明空间的概念。

命名空间元素访问方式:

  • 非限定名称:

  • 限定名称

  • 完全限定名称

<?php
namespace henan;
function cesi(){
 echo '河南';
}

namespace shandong;
function cesi(){
 echo '山东';
}

cesi();            //非限定名称,直接访问命名空间shandong下的cesi(),输出山东
henan\cesi();      //限定名称,尝试访问命名空间shandong\henan下的cesi(),由于不存该命名空间,会报错。
\henan\cesi();     //完全限定名称,直接访问命名空间hean下的cesi(),输出河南

?>

命名空间的引入

<?php
namespace zhongguo\henan;
function cesi(){
 echo '河南';
}

namespace meiguo\niuyue;
function cesi(){
    echo '纽约';
}
class People{
    static $name = 'Peter';
}

namespace zhongguo\shandong;
function cesi(){
 echo '山东';
}
class People{
    static $name = '山西人';
}

use meiguo\niuyue;
\meiguo\niuyue\cesi();    //输出 纽约
niuyue\cesi();            //输出 纽约
echo \meiguo\niuyue\People::$name;    //输出 Peter

use meiguo\niuyue\People;
echo People::$name;    //由于山西中也存在People类,且其中也包含静态属性$name,这是就会发生冲突,系统就会报错。

//解决方案
use meiguo\niuyue\People as Pe;
echo Pe::$name;    //系统输出Peter;

//以下这种访问方式会访问到山西的People类中的属性
use meiguo\niuyue;
echo People::$name;    //输出 山西人
?>

引入文件没有命名空间,访问外部文件里的函数或方法

common.php

<?php
function cesi(){
    echo '台湾';
}
class People{
    static $name = '台湾人';
}

?>

运行文件test.php

<?php
namespace zhongguo\henan;
function cesi(){
 echo '河南';
}

include("./common.php");

namespace zhongguo\shandong;
function cesi(){
 echo '山东';
}
class People{
    static $name = '山东人';
}

\cesi();    //会访问外部引入的公共命名空间,输出 台湾
echo \People::$name;    //会访问外部引入的公共命名空间,输出 台湾人
?>

运行文件没有命名空间,引入外部文件里包含命名空间

test.php

<?php
function cesi(){
    echo '台湾';
}

include("./common.php");

class People{
    static $name = '台湾人';
}

zhongguo\henan\cesi();    //访问外部引入文件的zhongguo\henan命名空间下的cesi(),输出 河南
\zhongguo\henan\cesi();    //这种方式也可以访问外部引入文件的zhongguo\henan命名空间下的cesi(),输出 河南
?>

common.php

<?php
namespace zhongguo\henan;
function cesi(){
 echo '河南';
}

namespace zhongguo\shandong;
function cesi(){
 echo '山东';
}

?>

注意事项:

  • 命名空间只对类、函数、常量起作用

  • 声明命名空间的当前脚本第一个命名空间前面不能有任何代码(注释除外)

  • 命名空间是虚拟的抽象空间,不是真的存在目录

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学