当前位置: 首页 > news >正文

php的命名空间

允许通过别名引用或导入外部的完全限定名称,是命名空间的一个重要特征。这有点类似于在类 unix 文件系统中可以创建对其它的文件或目录的符号连接。

PHP 命名空间支持 有两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名。注意PHP不支持导入函数或常量。

在PHP中,别名是通过操作符 use 来实现的. 下面是一个使用所有可能的三种导入方式的例子:

Example #1 使用use操作符导入/使用别名

 

<?php
namespace foo;
use My\Full\Classname as Another;

// 下面的例子与 use My\Full\NSname as NSname 相同
use My\Full\NSname;

// 导入一个全局类
use \ArrayObject;

$obj = new namespace\Another; // 实例化 foo\Another 对象
$obj = new Another; // 实例化 My\Full\Classname 对象
NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
// 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象
?>

 

注意对命名空间中的名称(包含命名空间分隔符的完全限定名称如 Foo\Bar以及相对的不包含命名空间分隔符的全局名称如 FooBar)来说,前导的反斜杠是不必要的也不允许有反斜杠,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。

Example #2 通过use操作符导入/使用别名,一行中包含多个use语句

 

<?php
use My\Full\Classname as Another, My\Full\NSname;

$obj = new Another; // 实例化 My\Full\Classname 对象
NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
?>

 

导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。

Example #3 导入和动态名称

 

<?php
use My\Full\Classname as Another, My\Full\NSname;

$obj = new Another; // 实例化一个 My\Full\Classname 对象
$a = 'Another';
$obj = new $a;      // 实际化一个 Another 对象
?>

 

 

 

另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。

 

Example #4 导入和完全限定名称

 

<?php
use My\Full\Classname as Another, My\Full\NSname;

$obj = new Another; // instantiates object of class My\Full\Classname
$obj = new \Another; // instantiates object of class Another
$obj = new Another\thing; // instantiates object of class My\Full\Classname\thing
$obj = new \Another\thing; // instantiates object of class Another\thing
?>

 

 

 

 

转载于:https://www.cnblogs.com/zl0372/p/namespace.html

相关文章:

  • java Web相关零碎整理--厚积薄发
  • Hibernate执行原生SQL返回ListMap类型结果集
  • Android编译过程详解(一)
  • 【bootstrap】modal模态框的几种打开方法+问题集锦
  • denyhost防止SSH暴力破解
  • [国家集训队2012]middle
  • Design Pattern: Prototype 模式
  • Linux环境下shell和vim中乱码原因及消除办法
  • 利用Docker轻松玩转Cassandra
  • 搭建高可用mongodb集群(三)—— 深入副本集内部机制
  • 【算法专题】卡特兰数(计数数列)
  • 51cto任意密码修改(失效了)
  • Wannafly挑战赛7 C - 小Q与氪金游戏
  • [c#基础]DataTable的Select方法
  • Hibernate 缓存
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【React系列】如何构建React应用程序
  • 4. 路由到控制器 - Laravel从零开始教程
  • Fastjson的基本使用方法大全
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 二维平面内的碰撞检测【一】
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于webpack 的 vue 多页架构
  • 聊聊sentinel的DegradeSlot
  • 模型微调
  • 爬虫模拟登陆 SegmentFault
  • 日剧·日综资源集合(建议收藏)
  • 如何解决微信端直接跳WAP端
  • AI算硅基生命吗,为什么?
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​2020 年大前端技术趋势解读
  • ​卜东波研究员:高观点下的少儿计算思维
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (java)关于Thread的挂起和恢复
  • (未解决)macOS matplotlib 中文是方框
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Google的Objective-C编码规范
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)程序员疫苗:代码注入
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net core 依赖注入的基本用发
  • .net 微服务 服务保护 自动重试 Polly
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .Net中ListT 泛型转成DataTable、DataSet
  • .NET中使用Redis (二)
  • @DataRedisTest测试redis从未如此丝滑
  • @Resource和@Autowired的区别
  • [145] 二叉树的后序遍历 js
  • [30期] 我的学习方法
  • [Bugku]密码???[writeup]
  • [BZOJ3223]文艺平衡树