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 相关文章推荐
第十一节--重载
Nov 16 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
PHP防止注入攻击实例分析
Nov 03 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
详解WordPress开发中get_header()获取头部函数的用法
Jan 08 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP获取MySQL执行sql语句的查询时间方法
Aug 21 PHP
PHP数字金额转换成中文大写显示
Jan 05 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
解析php取整的几种方式
2013/06/25 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
Python fileinput模块使用实例
2015/05/28 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
单位领导证婚词
2014/01/14 职场文书
初一地理教学反思
2014/01/16 职场文书
公司周年庆活动方案
2014/08/25 职场文书
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript