第十四节--命名空间


Posted in PHP onNovember 16, 2006

/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/
命名空间在PHP5正式版本中被取消,本节内容无效--Haohappy注
第十四节--命名空间
命名变量,函数和类是挺困难的,除了要考虑到变量的名称要易于理解,还要担心是否这个名称在其它某个地方已经使用过. 在一小段脚本中,第二个问题是基本问题. 当你考虑重用你的代码, 在这之后的项目代码必须避免使用你用过的命名. 通常来说,可重用的代码总是包含在函数或类中, 需要处理许多可能发生的命名冲突. 但函数和类之间也可能发生命名冲突. 你可以尝试避免出现这种情况,通过在所有类前添加前缀的方法,或者你可以使用namespace语句.
Namespace关键字给一块代码命名. 在这个代码块外部,脚本必须用操作符::加上命名空间的名称来引用这个代码块. 引用静态的类成员也是用相同的方法. 在命名空间内代码不需要声明命名空间, 它本身就是默认的. 这种方法比添加前缀的方法好. 你的代码可由此变得更加紧凑和可读.
你可能想知道是否可以建立分层的(嵌套的)命名空间. 答案是不可以. 但你可以在命名空间名称后加上冒号, 你可以再次调用在名称中不包含冒号的变量,函数和类. 命名空间允许存在冒号,只要不是第一个字符和最后一个字符或接着另一个冒号. 命名空间的名称中的冒号对于PHP来说没有任何意义, 但如果你用他们来区分逻辑上的区块, 他们可以很好地说明你的代码中的父子(parent-child)关系.
/* 注: 即可以使用这样: 
namespace animal:dog {}
namespace animal:pig {}
用冒号来说明parent-child关系.
*/
你可能在一个命名空间语句内没有包含函数,类或常量定义以外的任何东西. 这将阻止你使用他们来改进旧的使用全局变量的函数库. 命名空间最适合于面向对象. 命名空间内的常量与类中的常量使用相同的语法. 
例子6.17显示了如何使用命名空间.
Listing 6.17 Using a namespace

<?php   
   namespace core_php:utility   
   {   
       class textEngine   
       {   
           public function uppercase($text) //大写   
           {   
               return(strtoupper($text));   
           }   
       }   
       //make non-OO interface 建立一个非OO的接口   
       function uppercase($text)   
       {   
           $e = new textEngine;   
           return($e->uppercase($text));   
       }   
   }   
   //test class in namespace 测试命名空间中的类   
   $e = new core_php:utility::textEngine;   
   print($e->uppercase("from object") . "<br>");   
   //test function in namespace 测试命名空间中的函数   
   print(core_php:utility::uppercase("from function") . "<br>");   
   //bring class into global namespace 把类导入全局命名空间   
   import class textEngine from core_php:utility;   
   $e2 = new textEngine;   
?>  
Import语句把命名空间中的某个部份导入全局的命名空间. 
要导入单一的命名空间的成员,可以指定类型为constant,function或class,接着写上成员的名称;
//如import class XXX
如果你想导入某一特定类型的所有成员,你可以用*来代替名称;
//如 import constant * 导入所有常量
如果你想导入所有类型的所有成员,用*即可. 
//如 import *
在成员之后,用from关键字加上命名空间的名称.
//如 import class textEngine from core_php:utility;
总之你要写成像import * from myNamespace或 import class textEngine from core_php:utility这样的语句,就像例6.17中那样. 
PHP 相关文章推荐
php中sprintf与printf函数用法区别解析
Feb 17 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
PHP闭包实例解析
Sep 08 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
PHP中的流(streams)浅析
Jul 02 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
PHP实现动态web服务器方法
Jul 29 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
Thinkphp实现短信验证注册功能
Oct 18 PHP
PHP与SQL语句常用大全
Dec 10 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
第十三节--对象串行化
Nov 16 #PHP
第十二节--类的自动加载
Nov 16 #PHP
第十一节--重载
Nov 16 #PHP
第十节--抽象方法和抽象类
Nov 16 #PHP
第九节--绑定
Nov 16 #PHP
第八节--访问方式
Nov 16 #PHP
第七节--类的静态成员
Nov 16 #PHP
You might like
一个PHP日历程序
2006/12/06 PHP
thinkphp缓存技术详解
2014/12/09 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
Python实现的选择排序算法示例
2017/11/29 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
python 并发下载器实现方法示例
2019/11/22 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
庆元旦迎新年广播稿
2014/02/18 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
促销活动总结怎么写
2014/06/25 职场文书
购房协议书范本
2014/10/02 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
mysql查询结果实现多列拼接查询
2022/04/03 MySQL