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运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
ThinkPHP独立分组使用的注意事项
Nov 25 PHP
Laravel 5 学习笔记
Mar 06 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
php将金额数字转化为中文大写
Jul 09 PHP
详解php比较操作符的安全问题
Dec 03 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 PHP
php时间戳转换代码详解
Aug 04 PHP
php实现简易计算器
Aug 28 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简写功能的方法
2019/11/28 PHP
js 调整select 位置的函数
2008/02/21 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
javascript数组去掉重复
2011/05/12 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
Python对列表排序的方法实例分析
2015/05/16 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Django中的Signal代码详解
2018/02/05 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
python tornado使用流生成图片的例子
2019/11/18 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
Java使用jmeter进行压力测试
2021/07/09 Java/Android