PHP命名空间(namespace)的动态访问及使用技巧


Posted in PHP onAugust 18, 2014

PHP的命名空间(namespace)是PHP 5.3中加入最重要的一个新特性,这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的。

一.动态访问命名空间的元素

namespace me\poet;
function test()
{
  echo '1111';
}
$fun = 'test';//不能这么用,最后$fun()无法动态调用到test():Fatal error: Call to undefined function test()
$fun = '\me\poet\test';//正确
//$fun = 'me\poet\test';//正确
$fun();

也就是说,动态调用必须是 限定名称 或 完全限定名称(概念参考:PHP命名空间的使用基础)

二.魔术常量 和 操作符

namespace me\poet;
function test()
{
  echo '1';
}
echo __NAMESPACE__; //魔术常量:命名空间的名称(输出 me\poet)
//namespace操作符:显式访问当前命名空间或子命名空间中的元素,等价于类中的self操作符
\me\poet\test();
namespace\test();
//上两行代码等价。

三.别名、导入 和 全局空间(含多个例子)

namespace ws\weichen\www;
use ws\weichen\www as poet;//定义别名poet
//use ws\weichen\www; //不加as,则取最后的作为别名(www)
function demo()
{
  echo '1';
}
\ws\weichen\www\demo();
poet\demo();
//www\demo();//不加as的情况,则这样调用

以上三行代码效果一样。
按规则(ws\weichen\www)命名的好处:若更换域名,只要把前缀名称改了就可以,不影响后面代码中别名www的使用。

/* 导入 */
include 'hello.class.php';
use \ws\weichen\www;
use \Hello;
/*--------------------------------------------------------*/
/* 支持多个use语句 */
use \nihao\shijie as hello, \ws\weichen\www;
/*--------------------------------------------------------*/
/* 全局空间:反斜线调用 */
namespace A\B\C;
//这个函数是 A\B\C\fopen();
function fopen()
{
  $f = \fopen('demo.txt');//调用全局fopen函数
  return $f;
}
PHP 相关文章推荐
如何实现给定日期的若干天以后的日期
Oct 09 PHP
PHP 采集心得技巧
May 15 PHP
php下载文件的代码示例
Jun 29 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
PHP多进程编程实例
Oct 15 PHP
php判断linux下程序问题实例
Jul 09 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
全面解析PHP面向对象的三大特征
Jun 10 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 PHP
PHP命名空间(namespace)的使用基础及示例
Aug 18 #PHP
mac环境中使用brew安装php5.5.15
Aug 18 #PHP
PHP 正则表达式常用函数
Aug 17 #PHP
PHP常用正则表达式集锦
Aug 17 #PHP
学习php中的正则表达式
Aug 17 #PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 #PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 #PHP
You might like
php调用Google translate_tts api实现代码
2013/08/07 PHP
php检测useragent版本示例
2014/03/24 PHP
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
js判断节假日实例代码
2017/12/27 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
详解Swift中属性的声明与作用
2016/06/30 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
python实现图片彩色转化为素描
2019/01/15 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
python做接口测试的必要性
2019/11/20 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
Django中的AutoField字段使用
2020/05/18 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
《音乐之都维也纳》教学反思
2014/04/16 职场文书
2014年护士长工作总结
2014/11/11 职场文书
2014年教务工作总结
2014/12/03 职场文书
计算机教师工作总结
2015/08/13 职场文书
2016入党心得体会范文
2016/01/06 职场文书
调解协议书范本
2016/03/21 职场文书