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 相关文章推荐
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
php checkbox 取值详细说明
Aug 19 PHP
php SQL Injection with MySQL
Feb 27 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
详细解读php的命名空间(一)
Feb 21 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
详解php命令注入攻击
Apr 06 PHP
PHP钩子实现方法解析
May 21 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
django的csrf实现过程详解
2019/07/26 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
什么是规则表达式
2012/05/03 面试题
安全教育感言
2014/03/04 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
夫妻吵架保证书
2015/05/08 职场文书
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python