第十四节 命名空间 [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 相关文章推荐
phpmyadmin操作流程
Oct 09 PHP
php 生成文字png图片的代码
Apr 17 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
ThinkPHP独立分组使用的注意事项
Nov 25 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
php中preg_replace_callback函数简单用法示例
Jul 21 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
实例讲解php实现多线程
Jan 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
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
摘自启点的main.js
2008/04/20 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
JavaScript判断IE版本型号
2015/07/27 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python利用Guetzli批量压缩图片
2017/03/23 Python
详解Python3 基本数据类型
2019/04/19 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
解决python replace函数替换无效问题
2020/01/18 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
高中家长意见怎么写
2015/06/03 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
新手入门Mysql--概念
2021/06/18 MySQL
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
Python可视化神器pyecharts绘制水球图
2022/07/07 Python