日期:2013-10-17  浏览次数:20481 次

PHP程序编码规范标准
最后修改日期: 2000-11-16
PHP编程标准是经由Todd Hoff许可,基于《C++ 编程标准》为PHP而重写的,
作者为Fredrik Kristiansen,
使用本标准,如果您想拷贝一份留做自用的话,那是完全免费的,这也是我们制作它的原因。假如您发现了任何的错误又或者是有任何的改进,请您给笔者发一个email,以便笔者将它们合并到最新更新中去。

目录
介绍
标准化的重要性
解释
认同观点
项目的四个阶段
命名规则
合适的命名
缩写词不要全部使用大写字母
类命名
类库命名
方法命名
类属性命名
方法中参数命名
变量命名
引用变量和函数返回引用
全局变量
定义命名 / 全局常量
静态变量
函数命名
php文件扩展名
文档规则
评价注释
Comments Should Tell a Story
Document Decisions
使用标头说明
Make Gotchas Explicit
Interface and Implementation Documentation
目录文档
复杂性管理规则
Layering
Open/Closed Principle
Design by Contract
类规则
Different Accessor Styles
别在对象架构期做实际的工作
Thin vs. Fat Class Interfaces
短方法
进程规则
Use a Design Notation and Process
Using Use Cases
Code Reviews
Create a Source Code Control System Early and Not Often
Create a Bug Tracking System Early and Not Often
RCS关键词、更改记录和历史记录规则
Honor Responsibilities
格式化
大括号 {} 规则
缩进/制表符/空格 规则
小括号、关键词和函数 规则
If Then Else 格式
switch 格式
continue,break 和 ? 的使用
每行一个语句
声明块的定位
流行神话
Promise of OO
杂项
不要不可思议的数字
错误返回检测规则
不要采用缺省值测试非零值
布尔逻辑类型
通常避免嵌入式的赋值
重用您和其他人的艰苦工作
使用if (0)来注释外部代码块
其他杂项
--------------------------------------------------------------------------------
介绍
标准化的重要性
标准化问题在某些方面上让每个人头痛,让人人都觉得大家处于同样的境地。这有助于让这些建
议在许多的项目中不断演进,许多公司花费了许多星期逐子字逐句的进行争论。标准化不是特殊
的个人风格,它对本地改良是完全开放的。
优点
当一个项目尝试着遵守公用的标准时,会有以下好处:
程序员可以了解任何代码,弄清程序的状况
新人可以很快的适应环境
防止新接触php的人出于节省时间的需要,自创一套风格并养成终生的习惯
防止新接触php的人一次次的犯同样的错误
在一致的环境下,人们可以减少犯错的机会
程序员们有了一致的敌人 :-)
缺点
现在轮到坏处了:
因为标准由一些不懂得php的人所制定,所以标准通常看上去很傻
因为标准跟我做的不一样,所以标准通常看上去很傻
标准降低了创造力
标准在长期互相合作的人群中是没有必要的
标准强迫太多的格式
总之人们忽视标准
讨论
许多项目的经验能得出这样的结论:采用编程标准可以使项目更加顺利地完成。标准是成功的关
键么?当然不。但它们可以帮助我们,而且我们需要我们能得到的所有的帮助!老实说,对一个
细节标准的大部分争论主要是源自自负思想。对一个合理的标准的很少决定能被说为是缺乏技术
性的话,那只是口味的原因罢了。所以,要灵活的控制自负思想,记住,任何项目都取决于团队
合作的努力。
解释
惯例
在本文档中使用“要”字所指的是使用本规范的所有项目需要遵守规定的标准。
使用“应该”一词的作用是指导项目定制项目细节规范。因为项目必须适当的包括 (include),
排除(exclude)或定制(tailor)需求。
使用“可以”一词的作用与“应该”类似,因为它指明了可选的需求。
标准实施
首先应该在开发小组的内部找出所有的最重要的元素,也许标准对你的状况还不够恰当。它可能已经概
括了 重要的问题,也可能还有人对其中的某些问题表示强烈的反对。
无论在什么情况下,只要最后顺利的话,人们将成熟的明白到这个标准是合理的,然后其他的程序员们
也会发现它的合理性,并觉得带着一些保留去遵循这一标准是值得的。
如果没有自愿的合作,可以制定需求:标准一定要经过代码的检验。
如果没有检验的话,这个解决方案仅仅是一个建立在不精确的基础上的一大群可笑的人。
认同观点
这行不通;
也许可行吧,但是它既不实用又无聊;
这是真的,而且我也告诉过你啊;
这个是我先想到的;
本来就应该这样。
如果您带着否定的成见而来看待事物的话,请您保持开放的思想。你仍可以做出它是废话的结论,但是做
出结论的方法就是你必须要能够接受不同的思想。请您给自己一点时间去做到它。
项目的四个阶段
数据库结构
设计
数据层
HTML层
--------------------------------------------------------------------------------
命名规则
合适的命名
命名是程序规划的核心。古人相信只要知道一个人真正的名字就会获得凌驾于那个人之上的不可思议的力
量。只要你给事物想到正确的名字,就会给你以及后来的人带来比代码更强的力量。别笑!
名字就是事物在它所处的生态环境中一个长久而深远的结果。总的来说,只有了解系统的程序员才能为系
统取出最合适的名字。如果所有的命名都与其自然相适合,则关系清晰,含义可以推导得出,一般人的推
想也能在意料之中。
如果你发觉你的命名只有少量能和其对应事物相匹配的话, 最好还是重新好好再看看你的设计吧。
类命名
在为类(class )命名前首先要知道它是什么。如果通过类名的提供的线索,你还是想不起这个类是
什么 的话,那么你的设计就还做的不够好。
超过三个词组成的混合名是容易造成系统各个实体间的混淆,再看看你的设计,尝试使用(CRC Se-
ssion card)看看该命名所对应的实体是否有着那么多的功用。
对于派生类的命名应该避免带其父类名的诱惑,一个类的名字只与它自身有关,和它的父类叫什么无
关。
有时后缀名是有用的,例如:如果你的系统使用了代理(agent ),那么就把某个部件命名为“下
载代理”(DownloadAgent)用以真正的传送信息。
方法和函数命名
通常每个方法和函数都是执行一个动作的,所以对它们的命名应该清楚的说明它们是做什么的:用
CheckForErrors()代替ErrorCheck(),用DumpDataToFile()代替DataFile()。这么做也可以使功能和
数据成为更可区分的物体。
有时后缀名是有用的:
Max - 含义为某实体所能赋予的最大值。
Cnt - 一个运行中的计数变量的当前值。
Key - 键值。
例如:RetryMax 表示最多重试次数,RetryCnt 表示当前重试次数。
有时前缀名是有用的:
Is - 含义为问一个关于某样事物的问题。无论何时,当人们看到Is就会知道这是一个问题。
Get - 含义为取得一个数值。
Set - 含义为设定一个数值
例如:IsHitRetryLimit。
缩写词不要全部使用大写字母
无论如何,当遇到以下情况,你可以用首字母大写其余字母小