第十四节 命名空间 [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中Date获取时间不正确怎么办
Jun 05 PHP
php 文件上传类代码
Aug 06 PHP
PHP flush()与ob_flush()的区别详解
Jun 03 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
php class类的用法详细总结
Oct 17 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
实例讲解PHP表单验证功能
Feb 15 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
php4的session功能评述(一)
2006/10/09 PHP
基于mysql的论坛(4)
2006/10/09 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
javascript 定义新对象方法
2010/02/20 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
python框架django基础指南
2016/09/08 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
python opencv读mp4视频的实例
2018/12/07 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
python查看数据类型的方法
2019/10/12 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
售后服务承诺书范文
2014/03/26 职场文书
党组织公开承诺书
2014/03/29 职场文书
英文演讲稿
2014/05/15 职场文书
教师师德表现自我评价
2015/03/05 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书