第十四节 命名空间 [14]


Posted in PHP onOctober 09, 2006

命名变量,函数和类是挺困难的,除了要考虑到变量的名称要易于理解,还要担心是否这个名称在其它某个地方已经使用过. 在一小段脚本中,第二个问题是基本问题. 当你考虑重用你的代码, 在这之后的项目代码必须避免使用你用过的命名. 通常来说,可重用的代码总是包含在函数或类中, 需要处理许多可能发生的命名冲突. 但函数和类之间也可能发生命名冲突. 你可以尝试避免出现这种情况,通过在所有类前添加前缀的方法,或者你可以使用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) file://大写
{
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中在数据库中保存Checkbox数据(1)
Oct 09 PHP
PHP 采集程序中常用的函数
Dec 09 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
thinkphp实现数组分页示例
Apr 13 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
php代码架构的八点注意事项
Jan 25 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
python进程与线程小结实例分析
Nov 11 PHP
php curl发送请求实例方法
Aug 01 PHP
PHP code 验证码生成类定义和简单使用示例
May 27 PHP
学习使用PHP数组
Oct 09 #PHP
PHP中创建并处理图象
Oct 09 #PHP
如何正确理解PHP的错误信息
Oct 09 #PHP
php+dbfile开发小型留言本
Oct 09 #PHP
用 php 编写的日历
Oct 09 #PHP
第十三节 对象串行化 [13]
Oct 09 #PHP
第七节 类的静态成员 [7]
Oct 09 #PHP
You might like
PHP面向对象编程快速入门
2006/10/09 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
js函数般调用正则
2008/04/08 Javascript
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
js实现简单的验证码
2015/12/25 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python调用staf自动化框架的方法
2018/12/26 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
社区敬老月活动实施方案
2014/02/17 职场文书
群众路线教育实践活动心得体会
2014/03/07 职场文书
专家推荐信怎么写
2015/03/25 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书