第十四节 命名空间 [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初学者头痛的十四个问题
Jul 12 PHP
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
自动生成文章摘要的代码[PHP 版本]
Mar 20 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
php实现购物车功能(上)
Jul 23 PHP
PHP7常量数组用法分析
Sep 26 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
Zend Framework路由器用法实例详解
Dec 11 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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/11/25 PHP
php生成excel文件的简单方法
2014/02/08 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
flask中过滤器的使用详解
2018/08/01 Python
python math模块的基本使用教程
2021/01/16 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
几道PHP面试题
2013/04/14 面试题
《散步》教学反思
2014/03/02 职场文书
护士求职自荐信范文
2014/03/19 职场文书
健康家庭事迹材料
2014/05/02 职场文书
雨花台导游词
2015/02/06 职场文书
初婚未育证明样本
2015/06/18 职场文书
写给同事的离职感言
2015/08/04 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers