第十四节--命名空间


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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
剖析 PHP 中的输出缓冲
Dec 21 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
ini_set的用法介绍
Jan 07 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
Jul 11 PHP
ThinkPHP控制器详解
Jul 27 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
Nov 09 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 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 搜索框提示(自动完成)实例代码
2012/02/05 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
python实现井字棋小游戏
2020/03/04 Python
如何用python免费看美剧
2020/08/11 Python
python包的导入方式总结
2021/03/02 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
植物选择:Botanic Choice
2017/02/15 全球购物
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
Golang 入门 之url 包
2022/05/04 Golang