第十四节 命名空间 [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漏洞小结
Feb 05 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
PHP闭包实例解析
Sep 08 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
php实现统计目录文件大小的函数
Dec 25 PHP
Yii中创建自己的Widget实例
Jan 05 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 PHP
php post json参数的传递和接收处理方法
May 31 PHP
PHP开发实现快递查询功能详解
Apr 08 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 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 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
jQuery 加上最后自己的验证
2009/11/04 Javascript
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
详解jQuery中的事件
2016/12/14 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
如何手工释放资源
2013/12/15 面试题
配置管理计划的主要内容有哪些
2014/06/20 面试题
餐饮投资计划书
2014/04/25 职场文书
2015年测量员工作总结
2015/05/23 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
2022年四月新番
2022/03/15 日漫