PHP教程之PHP教程:PHP代码中的称号空间
完成一个功能齐全的动态站点 </p> 在 PHP V5.3 中引入的称号空间是为 PHP 类、常量和函数供应高低文的一种体例,从而可以将利用不异称号的元素看做是唯一的。唯一的称号防止了定名抵触,当两个类或函数利用不异的称号时就会产生这类情形。有时这些 PHP 类暗示实际世界中的不异对象,但它们的行动是完整分歧的。称号空间可以确保您具有准确的 PHP 类、常量或函数,而且要利用您的 PHP 类的人可以确保他们利用了准确的类。代码中的称号空间就像实际世界中的高低文。思索一个暗示实际世界中的汽车对象的类。例如,经由过程 Internet 发卖汽车的公司利用的 Automobile 类的行动能够与保险发卖公司利用的 Automobile 类完整分歧。
作为使用法式开辟人员,您能够利用其别人编写的组件。您不克不及包管其别人永久不利用您已利用的类名,但这些类的行动却天差地别。在呈现称号空间之前,PHP 开辟人员凡是将高低文构建到类名中,例如 My_Enterprise_Person 或 XML_Validator。
清单 1 显示了一个位于称号空间中的类。
清单 1. 在称号空间中声明类
<?phpnamespace IBM;class Foo {...}?>
上面给出了一个例子,展现了若何在称号空间中援用类。
清单 2. 在称号空间中援用类
<?php$foo = new \IBM\Foo();?>
在向一切类添加称号空间之前界说一个称号空间战略是个不错的主张。虽然在某种水平上也能够不休地构建称号空间,但最好为称号空间肯定一个通用布局,以便利称号空间的组织,并削减今后能够需求的修正。只需准确利用,除供应高低文以外,称号空间还可以用来组织 PHP 代码。
其他言语(好比 Java™ 和 C#)在好久之前就利用称号空间。在选择称号空间定名体例上,我利用的商定相似于这些言语的商定,由于很多开辟人员都对此对照熟习,便于他们了解。不外,与 Java 言语分歧的是,PHP 中的称号空间与类地点的目次之间没有接洽。您可以给类、函数或常量选择恣意的称号空间。您乃至可以对一个文件利用多个称号空间。同时,PHP 称号空间也分歧于 C#,您可以对类之外的函数或常量利用称号空间。
顶级称号空间
假如您为某个组织构建称号空间,您可使用组织名作为顶级域。普通情形下,利用组织称号创立顶级称号空间已足觉得 PHP 代码供应高低文,和防止定名抵触,除非该组织编写大批用处纷歧的使用法式。
清单 3 的示例显示了若何声明顶级称号空间。
清单 3. 顶级称号空间
<?phpnamespace IBM;...?>
http://www.webjx.com/files/allimg/090807/1543330.gif
http://www.webjx.com/files/allimg/090807/1543331.gif http://www.webjx.com/files/allimg/090807/1543331.gif
次级称号空间
次级称号空间 是顶级称号空间外部的称号空间。当顶级称号空间还缺乏觉得 PHP 类创立高低文时,它们供应进一步申明。
在创立次级称号空间时,不要凭一时的乐趣而过量地创立,这很主要。跟着次级称号空间的增多,组织和援用它们就会变得愈来愈坚苦。假如您但愿称号空间发扬两重感化,即防止定名抵触和组织 PHP 代码,那末就要加倍注重这点了。
在决意为了便利组织代码应当向另外一个称号空间引入几何个次级称号空间时,我测验考试将该数目限制为 7 个(高低浮动不超越 2),以使用数字 7 加倍轻易记住这个优势。这其实不老是见效的,但我将它作为一个指点准绳,以确保不将称号空间划分为过量的次级称号空间。
清单 4 的示例显示了在顶级称号空间中声明次级称号空间。
清单 4. 次级称号空间
<?phpnamespace IBM\DeveloperWorks;...?>
反斜杠(\)将次级称号空间 “developerWorks” 与顶级称号空间 “IBM” 分隔。
在声明次级称号空间时,您可使用两个罕见技能,或同时利用它们。获得称号空间的罕见中央是项目名或使用法式名;另外一个中央是域名。
经由过程项目界说
假如您利用组织名作为顶级称号空间,而且想经由过程次级称号空间来进一步供应高低文,那末可使用项目名或使用法式名作为次级称号空间。例如,假如您构建一个称为 Greeter 的新使用法式(用于获得用户的称号并问候他们),那末清单 5 中的称号空间将为称为 Prompt 的类供应完全的高低文。
清单 5. 利用使用法式名作为次级称号空间
<?phpnamespace IBM\Greeter;class Prompt {...}?>
因为 Prompt 多是多个使用法式或库的类名,所觉得该称号空间添加组织名和项目名可以让这个 Prompt 类与其他同名的类辨别开来。
经由过程域界说
利用域名是另外一种选择次级称号空间的罕见体例,如 清单 6 所示。它也能够用于项目名以后,是不是利用取决于您对可重用性的企图(见 “依据可重用人命名”)。
域 是对更大的成绩域的一组分类。域的一个例子是在更大型的使用法式中处置帐户、客户和产物的 “Account”、“Customers” 或 “Products”。
清单 6. 利用域作为次级称号空间
<?phpnamespace IBM\MyApp\Account;class Address {...}?>
http://www.webjx.com/files/allimg/090807/1543330.gif
http://www.webjx.com/files/allimg/090807/1543331.gif http://www.webjx.com/files/allimg/090807/1543331.gif
依据可重用人命名
除使用撑持可重用性的模块概念以外,类和称号空间的定名体例也可以完成可重用性。有时不良的定名体例会伤害可重用性,由于欠安的称号暗示着类仅能用于特定目标。一样,毛病地使用称号空间能够会不用要地局限类的利用局限,让它们的重用变得坚苦。
在利用组织名的顶级称号空间中,应当保存 “Common”、“Core”、“Lib” 等可跨使用法式重用的称号空间。一个罕见的例子是验证,个中针对全部企业的库存单元(SKU)、帐号或发票号的划定规矩是一样的,从而取得适合的划定规矩和长度。关于 Validator 类,相似清单 7 的称号空间是不错的选择。
清单 7. 利用通用的 validation 称号空间
<?phpnamespace MyCompany\Common\Validation;class NotNullValidator {...}?>
在这里,组织名用作顶级域(“MyCompany”)。“Common” 称号空间用作项目。即便在编写这个类的同时或许正在编写一个特定的使用法式,该类一样可以在组织的任何项目中利用。最初,“Validation” 用作类的域。
http://www.webjx.com/files/allimg/090807/1543330.gif
http://www.webjx.com/files/allimg/090807/1543331.gif http://www.webjx.com/files/allimg/090807/1543331.gif
利用别号
虽然称号空间可以匡助您组织类并防止定名商定,但其弱点是称号太长。侥幸的是,PHP 撑持利用别号,因而可以在代码中利用更短的别号。清单 8 供应了一个示例。
清单 8. 利用别号
<?phpuse MyCompany\Common\Validation as Validators;?>
http://www.webjx.com/files/allimg/090807/1543330.gif
http://www.webjx.com/files/allimg/090807/1543331.gif http://www.webjx.com/files/allimg/090807/1543331.gif
定名商定
称号空间定名利用单词首字母大写或 PASCAL 定名商定,这与其他 PHP 商定一样,好比 PHP Extension 和 Application Repository (PEAR) 包定名和文件名。例如,清单 9 中的称号空间比 清单 10 中的称号空间要好。
清单 9. 单词首字母大写或 PASCAL 定名
<?phpnamespace MyNamespace;?>
防止利用与其他 PHP 商定抵触的定名和巨细写商定。
清单 10. 利用糟的巨细写商定
<?phpnamespace mynamespace;...?>
http://www.webjx.com/files/allimg/090807/1543330.gif
http://www.webjx.com/files/allimg/090807/1543331.gif
停止语
PHP 中的称号空间可以用于组织代码、防止定名抵触和为类、函数和常量供应高低文。在称号空间中利用形式或商定让代码更容易于了解,而且更容易于援用和利用。
不过语法好学,但是怎么用语法来实现每个人都有每个人的方式,几乎是各有千秋。然而借鉴别人成功的代码,绝对是有益无害,因此,多看那些经过千锤百炼凝出来的经典代码,是进阶的最好方法。 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, Ps:以上纯属原创,如有雷同,纯属巧合 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 本文当是我的笔记啦,遇到的问题随时填充 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
页:
[1]