第十四节 命名空间 [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 变量类型的强制转换
Oct 23 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
6种php上传图片重命名的方法实例
Nov 04 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php实现的日历程序
Jun 18 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
有趣的python小程序分享
2017/12/05 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
python绘制规则网络图形实例
2019/12/09 Python
pandas的resample重采样的使用
2020/04/24 Python
Python: glob匹配文件的操作
2020/12/11 Python
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
中文系学生自荐信范文
2013/11/13 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
促销活动总结范文
2014/04/30 职场文书
妇女干部培训方案
2014/05/12 职场文书
实习协议书范本
2014/09/25 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android