PHP基础:PHP编码规范f二
时间:2007-02-09 来源:shiyaowen
/classes/com/Microsoft/
Database/DbConn.php [color="#000000"]
[color="#000000"]Apache[color="#000000"]的数据库相关类库可在:
[color="#000000"]
/classes/org/apache/Database/DbConn.php
[color="#000000"]
2.7.
[color="#000000"]方法命名
[color="#000000"]
·
[color="#000000"]采用与类命名一致的规则
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]使用所有不同规则的大部分人发现这是最好的折衷办法。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
class
NameOneTwo [color="#000000"]
{
[color="#000000"]
function
DoIt() {}; [color="#000000"]
function
HandleError() {}; [color="#000000"]
}
[color="#000000"]
2.8.
[color="#000000"]类属[color="#000000"]**[color="#000000"]命名
[color="#000000"]
·
[color="#000000"]属[color="#000000"]**[color="#000000"]命名应该以字符‘[color="#000000"]m[color="#000000"]’为前缀。
[color="#000000"]
·
[color="#000000"]前缀‘[color="#000000"]m[color="#000000"]’后采用于类命名一致的规则。
[color="#000000"]
·
[color="#000000"]‘[color="#000000"]m[color="#000000"]’总是在名字的开头起修饰作用,就像以‘[color="#000000"]r[color="#000000"]’开头表示引用一样。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]前缀[color="#000000"]'m'[color="#000000"]防止类属[color="#000000"]**[color="#000000"]和方法名发生任何冲突。你的方法名和属[color="#000000"]**[color="#000000"]名经常会很类似,特别是存取元素。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
class
NameOneTwo [color="#000000"]
{
[color="#000000"]
function
VarAbc() {}; [color="#000000"]
function
ErrorNumber() {}; [color="#000000"]
var
$mVarAbc; [color="#000000"]
var
$mErrorNumber; [color="#000000"]
var
$mrName; [color="#000000"]
}
[color="#000000"]
2.9.
[color="#000000"]方法中参数命名
[color="#000000"]
·
[color="#000000"]第一个字符使用小写字母。
[color="#000000"]
·
[color="#000000"]在首字符后的所有字都按照类命名规则首字符大写。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]可以区分方法中的一般变量。
[color="#000000"]
·
[color="#000000"]你可以使用与类名相似的名称而不至于产生重名冲突。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
class
NameOneTwo [color="#000000"]
{
[color="#000000"]
function
StartYourEngines( [color="#000000"]
&$rSomeEngine,
[color="#000000"]
&$rAnotherEngine);
[color="#000000"]
}
[color="#000000"]
2.10.
[color="#000000"]变量命名
[color="#000000"]
·
[color="#000000"]所有字母都使用小写
[color="#000000"]
·
[color="#000000"]使用[color="#000000"]'_'[color="#000000"]作为每个词的分界。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]通过这一途径,代码中变量的作用域是清晰的。
[color="#000000"]
·
[color="#000000"]所有的变量在代码中都看起来不同,容易辨认。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
function
HandleError($errorNumber) [color="#000000"]
{
[color="#000000"]
$error
= OsErr($errorNumber); [color="#000000"]
$time_of_error
= OsErr->GetTimeOfError(); [color="#000000"]
$error_processor
= OsErr->GetErrorProcessor(); [color="#000000"]
}
[color="#000000"]
2.11.
[color="#000000"]引用变量和函数返回引用
[color="#000000"]
·
[color="#000000"]引用必须带‘[color="#000000"]r[color="#000000"]’前缀
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]使得类型不同的变量容易辨认
[color="#000000"]
·
[color="#000000"]它可以确定哪个方法返回可更改对象,哪个方法返回不可更改对象。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
class
Test [color="#000000"]
{
[color="#000000"]
var
mrStatus; [color="#000000"]
function
DoSomething(&$rStatus) {}; [color="#000000"]
function
&rStatus() {}; [color="#000000"]
}
[color="#000000"]
2.12.
[color="#000000"]全局变量
[color="#000000"]
·
[color="#000000"]全局变量应该带前缀‘[color="#000000"]g[color="#000000"]’。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]知道一个变量的作用域是非常重要的。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
global
$gLog; [color="#000000"]
global
&$grLog; [color="#000000"]
2.13.
[color="#000000"]定义命名
/ [color="#000000"]全局常量
[color="#000000"]
·
[color="#000000"]全局常量用[color="#000000"]'_'[color="#000000"]分隔每个单词。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
[color="#000000"]这是命名全局常量的传统。你要注意不要与其它的定义相冲突。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
define("A_GLOBAL_CONSTANT",
"Hello world!"); [color="#000000"]
2.14.
[color="#000000"]静态变量
[color="#000000"]
·
[color="#000000"]静态变量应该带前缀‘[color="#000000"]s[color="#000000"]’。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]知道一个变量的作用域是非常重要的。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
function
test() [color="#000000"]
{
[color="#000000"]
static
$msStatus = 0; [color="#000000"]
}
[color="#000000"]
2.15.
[color="#000000"]函数命名
[color="#000000"]
·
[color="#000000"]函数名字采用C
GNU[color="#000000"]的惯例,所有的字母使用小写字母,使用[color="#000000"]'_'[color="#000000"]分割单词。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]这样可以更易于区分相关联的类名。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
function
some_bloody_function() [color="#000000"]
{
[color="#000000"]
}
[color="#000000"]
2.16.
[color="#000000"]错误返回检测规则
[color="#000000"]
·
[color="#000000"]检查所有的系统调用的错误信息,除非你要忽略错误。
[color="#000000"]
·
[color="#000000"]为每条系统错误消息定义好系统错误文本以便[color="#000000"]include[color="#000000"]。
[color="#000000"]
3.
[color="#000000"]书写规则
[color="#000000"]
3.1.
[color="#000000"]大括号
{} [color="#000000"]规则
[color="#000000"]
[color="#000000"]在三种主要的大括号放置规则中,有两种是可以接受的,如下的第一种是最好的:
[color="#000000"]
·
[color="#000000"]将大括号放置在关键词下方的同列处:
[color="#000000"]
if
($condition) while ($condition) [color="#000000"]
{
{ [color="#000000"]
...
... [color="#000000"]
}
} [color="#000000"]
·
[color="#000000"]传统的[color="#000000"]UNIX[color="#000000"]的括号规则是,首括号与关键词同行,尾括号与关键字同列:
[color="#000000"]
if
($condition) { while ($condition) { [color="#000000"]
...
... [color="#000000"]
}
} [color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]引起剧烈争论的非原则的问题可通过折衷的办法解决,两种方法任意一种都是可以接受的,然而对于大多数人来说更喜欢第一种。原因就是心理研究学习范畴的东西了。
[color="#000000"]
[color="#000000"]对于更喜欢第一种还有着更多的原因。如果您使用的字符编辑器支持括号匹配功能的话(例如[color="#000000"]vi[color="#000000"]),最重要的就是有一个好的样式。为什么?我们说当你有一大块的程序而且想知道这一大块程序是在哪儿结束的话。你先移到开始的括号,按下按钮编辑器就会找到与之对应的结束括号,例如:
[color="#000000"]
if
($very_long_condition && $second_very_long_condition) [color="#000000"]
{
[color="#000000"]
...
[color="#000000"]
}
[color="#000000"]
else
if (...) [color="#000000"]
{
[color="#000000"]
...
[color="#000000"]
}
[color="#000000"]
[color="#000000"]从一个程序块移动到另一个程序块只需要用光标和你的括号匹配键就可以了,不需找匹配的括号。
[color="#000000"]
3.2.
[color="#000000"]缩进[color="#000000"]/[color="#000000"]制表符[color="#000000"]/[color="#000000"]空格
[color="#000000"]规则
[color="#000000"]
·
[color="#000000"]使用制表符缩进。
[color="#000000"]
·
[color="#000000"]使用三到四个空格为每层次缩进。
[color="#000000"]
·
[color="#000000"]不再使用只要一有需要就缩排的方法。对于最大缩进层数,并没有一个固定的规矩,假如缩进层数大于四或者五层的时候,你可以考虑着将代码因数分解(factoring
out code)[color="#000000"]。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]许多编程者支持制表符。
[color="#000000"]
·
[color="#000000"]当人们使用差异太大的制表符标准的话,会使阅读代码变得很费力。
[color="#000000"]
·
[color="#000000"]如此多的人愿意限定最大的缩进层数,它通常从未被看作是一件工作。我们相信程序员们会明智的选择嵌套的深度。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
function
func() [color="#000000"]
{
[color="#000000"]
if
(something bad) [color="#000000"]
{
[color="#000000"]
if
(another thing bad) [color="#000000"]
{
[color="#000000"]
while
(more input) [color="#000000"]
{
[color="#000000"]
}
[color="#000000"]
}
[color="#000000"]
}
[color="#000000"]
}
[color="#000000"]
3.3.
[color="#000000"]小括号、关键词和函数
[color="#000000"]规则
[color="#000000"]
·
[color="#000000"]不要把小括号和关键词紧贴在一起,要用空格隔开它们。
[color="#000000"]
·
[color="#000000"]不要把小括号和函数名紧贴在一起。
[color="#000000"]
·
[color="#000000"]除非必要,不要在[color="#000000"]Return[color="#000000"]返回语句中使用小括号。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]关键字不是函数。如果小括号紧贴着函数名和关键字,二者很容易被看成是一体的。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
if
(condition) [color="#000000"]
{
[color="#000000"]
}
[color="#000000"]
while
(condition) [color="#000000"]
{
[color="#000000"]
}
[color="#000000"]
strcmp($s,
$s1); [color="#000000"]
return
1; [color="#000000"]
3.4.
[color="#000000"]别在对象架构函数中做实际的工作
[color="#000000"]
[color="#000000"]别在对象架构构造函数中做实际的工作,
[color="#000000"]构造函数应该包含变量的初始化和(或)不会发生失败的操作。
[color="#000000"]
[color="#000000"]理由
[color="#000000"]
·
[color="#000000"]构造不能返回错误
[color="#000000"]。
[color="#000000"]
[color="#000000"]例如
[color="#000000"]
class
Device [color="#000000"]
{
[color="#000000"]
function
Device() { /* initialize and other stuff */ } [color="#000000"]
function
Open() { return FAIL; } [color="#000000"]
};
[color="#000000"]
$dev
= new Device; [color="#000000"]
if
(FAIL == $dev->Open()) exit(1); [color="#000000"]
3.5.
If Then Else [color="#000000"]格式
[color="#000000"]
[color="#000000"]布局
[color="#000000"]
[color="#000000"]这由程序员决定。不同的花括号样式会产生些微不同的样观。一个通用方式是:
[color="#000000"]
if
([color="#000000"]条件1)
// [color="#000000"]注释
[color="#000000"]
{
[color="#000000"]
}
[color="#000000"]
else
if ([color="#000000"]条件2)
// [color="#000000"]注释
[color="#000000"]
{
[color="#000000"]
}
[color="#000000"]
else
// [color="#000000"]注释
[color="#000000"]
{
[color="#000000"]
}
[color="#000000"]
[color="#000000"]如果你有用到else
if
[color="#000000"]语句的话,通常最好有一个[color="#000000"]else[color="#000000"]块以用于处理未处理到的其他情况。可以的话放一个记录信息注释在[color="#000000"]else[color="#000000"]处,即使在[color="#000000"]else[color="#000000"]没有任何的动作。
[color="#000000"]
[color="#000000"]条件格式
[color="#000000"]
[color="#000000"]总是将恒量放在等号[color="#000000"]/[color="#000000"]不等号的左边,例如:
[color="#000000"]
if
( 6 == $errorNum ) ...
[color="#000000"]
[color="#000000"]一个原因是假如你在等式中漏了一个等号,语法检查器会为你报错。第二个原因是你能立刻找到数值而不是在你的表达式的末端找到它。需要一点时间来习惯这个格式,但是它确实很有用。
相关阅读 更多 +
排行榜 更多 +