考古学[转]PHP编码规范

横流:这是10年前的一样首PHP编码规范,最早发表为清华水木BBS,现在看似还找不顶整的版了,但迄今为止看起仍是蛮有参考意义。个人会冲经验做一些调整。文中对于命名一段子的描述极大的曾启发了个体的编程体验。如今php-fig小组发布之PSR系列规范,更为客观,请参见相应标准文档。

1. 介绍

1.1. 尺度的显要

规格问题在某些地方上为每个人头痛,让众人都认为大家处于同一的境地。这促进让这些建议以重重的种蒙持续演进,许多店花费了重重星期逐子字逐句的拓争论。标准化不是与众不同的个人风格,它对本土改良是全开放的。

1.2. 优点

当一个类尝试在遵守公用的标准时,会有以下好处:

· 程序员可以了解其他代码,弄清程序的观
· 新人可高速的适应环境
· 防止新接触php的丁由节省时间的内需,自创始一效风格并养成终生的惯
· 防止新接触php的人数一次次底犯同样的错
· 在同样的环境下,人们可减去犯错的机
· 程序员们发矣同的仇人

1.3. 缺点

· 标准要是因为一些请勿亮堂php的人数所制定,通常看上去很傻
· 因为专业及自身举行的匪一致,所以标准通常看上去分外傻
· 标准降低了创造力
· 标准于老互相合作的人流遭受是从未必要之
· 标准强迫太多之格式

1.4. 讨论

广大档的阅历会得出这样的定论:采用编程标准可以使项目越来越顺畅地就。标准是打响的严重性也?当然不。但它们可帮忙我们,而且我们需要我们能够获的兼具的帮带!老实说,对一个细节标准的大部分争执主要是根源自负思想。对一个客观的正统的好少决定会为说啊凡少技术性的言辞,那就是脾胃之原委罢了。所以,要灵活的主宰自负思想,记住,任何项目还在团队合作的着力。

1.5. 解释

1.5.1. 正经履

第一应该当付出小组的内部找来具有的极度关键的因素,也许标准对您的景尚不够恰当。它可能都席卷了
重要之问题,也说不定还有人对里面的一点问题代表肯定的反对。无论在什么动静下,只要最后胜利的语,人们用成熟之领悟到者正式是合理合法的,然后另外的程序员们为会发现它们的合理,并认为带在有些保存去按这等同标准是值得的。如果无自觉的通力合作,可以制定需求:标准自然要是由此代码的验。如果没有检的言辞,这个解决方案就是一个树在匪标准的功底及的平要命群可笑的丁。

1.5.2. 承认观点

  1. 当时无济于事;
  2. 想必可行吧,但是它既是不实用又俗;
  3. 就是的确,而且我吧报告了您呀;
  4. 其一是本人先想到的;
  5. 本就相应如此。
    倘若你带来在否定的成见而来对待事物的话,请你保持开放之想想。你本好做出它是废话的下结论,但是做出定论的方法就是若要要会承受不同之思索。请而让自己一点时间去完成它。

1.5.3. 门类之季只号

  1. 数据库结构
  2. 设计
  3. 数据层
  4. UI层

2. 命名规则

2.1. 适合的命名

命名是程序设计之着力。古人相信如果掌握一个人的确的名字即见面落超过于那个人以上的不可思议的力。只要您为物想到是的名字,就见面吃您同后来之丁带来比较代码更强的力。别笑!

名字就是事物在它们所处之生态环境中一个老而深远的结果。总的来说,只发打探系统的程序员才能够为系统取出最宜的讳。如果拥有的命名都和那个自然相契合,则关乎清晰,含义可以推导得出,一般人的推测也克以预期中。

如您意识你的命名只有为数不多能够跟夫针对性诺事物相配合的语,
最好或者再好好重新望您的计划吧。

2.2. 类命名

· 在也接近(class
)命名前率先使理解她是啊。如果由此类名的提供的头脑,你要想不起这个看似是啊的语,那么你的筹划虽还召开的非足够好。
·
超过三单词做的混合名是轻导致系统依次实体间的模糊,再看您的计划,尝试采取(CRC
Session card)看看该命名所对应的实体是否富有那么基本上之力量。
·
对于派生类的命名该避免带其父类名的吸引,一个好像的讳只是同它自己有关,和其的父类叫什么无关。
· 有时后缀名是立竿见影的,例如:如果您的网以了代理(agent
),那么即使把某某部件命名为“下载代理”(DownloadAgent)用以真正的传递信息。

2.3. 方以及函数命名

·
通常每个方法以及函数都是行一个动作的,所以本着它的命名该明了的求证其是开啊的:用CheckForErrors()代替ErrorCheck(),用DumpDataToFile()代替DataFile()。这么做吗得以要效益与数目化又不过分别的物体。
· 有时后缀名是行的:

o Max – 含义呢某实体所能给的最为可怜价值。
o Cnt – 一个周转着的计数变量的手上值。
o Key – 键值。
比如:RetryMax 表示无比多重试次数,RetryCnt 表示手上重试次数。

· 有时前缀名是有效的:

o Is –
含义为咨询一个关于某样事物之题材。无论何时,当众人看到Is就会见懂就是一个问题。
o Get – 含义为得到一个数值。
o Set – 含义为设定一个数值
例如:IsHitRetryLimit。

2.4. 缩写歌词毫不所有行使特别写字母

· 无论如何,当遇到以下状况,你可以用首许母大写那余字母小写来代表全部动特别写字母的措施来代表缩写词。
使用:
GetHtmlStatistic.
不使用:
GetHTMLStatistic.

理由

·
当命名含有缩略词时,人们似乎有着很不同的直觉。统一规定是极好,这样一来,命名的意义就是全可预知了。
举个NetworkABCKey的例证,注意C是当是ABC里面的C还是key里面的C,这个是殊令人费解的。有些人无放在心上这些,其他人也甚看不惯这样。所以您晤面在不同之代码里观看不同之条条框框,使得你莫亮堂怎么去给它们。
例如
class FluidOz // 不要写成 FluidOZ
class GetHtmlStatistic // 不要写成
GetHTMLStatistic

2.5. 类命名

· 使用十分写字母作为词之相间,其他的字母都采用小写
· 名字的首字母使用大写
· 不要采取下划线(‘_’)

理由

· 根据广大底命名方式,大部分总人口认为这样是无限好的计。
例如
class NameOneTwo
class Name

2.6. 类库命名

·
目前定名空间在越来越大的让下,以避免不同厂商跟团队类库间的类名冲突。
·
当尚未采取命名空间的时刻,为了避免类名冲突,一般的做法是在类名前增长特别的前缀,两只字符就可以了,当然多用有会面再好。

例如

John Johnson的数据结构类库可以用Jj做吧前缀,如下:
class JjLinkList
{
}

旁一样栽折中艺术是白手起家涵盖类库目录(事实上Java也是这么做的),以死的目录代表不同的命名空间。

例如
Microsoft的数据库相关类库可以在:
/classes/com/Microsoft/ Database/DbConn.php
Apache的数据库相关类库可于:
/classes/org/apache/Database/DbConn.php

2.7. 智命名

· 采用与类似命名一致的条条框框,但首许母小写

理由

· 使用所有不同规则之绝大多数总人口意识这是无限好的服办法。

例如
class NameOneTwo
{
function doIt() {};
function handleError() {};
}

2.8. 类性质命名

· 属性命名该因字符‘m’为前缀。
·
前缝‘m’后用让类命名一致的条条框框。
·
‘m’总是以名字的启幕起修饰作用,就像以‘r’开头表示援引一样。

理由

·
前缀’m’防止类属**同道名出任何冲突。你的方法名和属**名经常会生类似,特别是存取元素。

例如
class NameOneTwo
{
function VarAbc() {};
function ErrorNumber() {};
var $mVarAbc;
var $mErrorNumber;
var $mrName;
}

2.9. 方吃参数命名

· 第一单字符使用小写字母。
· 在首许符后的备字都按照类命名规则首字符大写。

理由

· 可以分方法吃之形似变量。
· 你得下以及类名相似之号而不致于发生重名冲突。

例如
class NameOneTwo
{
function StartYourEngines(
&$rSomeEngine,
&$rAnotherEngine);
}

2.10. 变量命名

· 所有字母都利用小写
· 使用’_’作为每个词之分界。

理由

· 通过就无异路线,代码中变量的作用域是清楚的。
· 所有的变量在代码中还扣留起不同,容易辨认。
例如
function handleError($errorNumber)
{
$error = OsErr($errorNumber);
$time_of_error = OsErr->getTimeOfError();
$error_processor = OsErr->getErrorProcessor();
}

2.11. 援变量和函数返回引用

· 引用得带来‘r’前缀

理由

· 使得项目不同之变量容易辨认
·
它可规定谁方法返回可转对象,哪个方法返回不可变更对象。

例如
class Test
{
var mrStatus;
function DoSomething(&$rStatus)
{};
function &rStatus() {};
}

2.12. 全局变量

· 全局变量应该带前缀‘g’。

理由

·
知道一个变量的作用域是十分重要的。
例如
global $gLog;
global &$grLog;

2.13. 定义命名 / 全局常量

· 全局常量用’_’分隔每个单词。

理由

旋即是命名全局常量的风俗。你而留意不要与另的定义相冲突。

例如
define(“A_GLOBAL_CONSTANT”, “Hello world!”);

2.14. 静态变量

· 静态变量应该带前缀‘s’。

理由

·
知道一个变量的作用域是老关键之。

例如
function test()
{
static $msStatus = 0;
}

2.15. 函数命名

· 函数名字下C GNU的规矩,所有的假名使用小写字母,使用’_’分割单词。

理由

· 这样可再易于区分相关联的类名。

例如
function some_bloody_function()
{
}

2.16. 错返回检测规则

· 检查有着的网调用的错误信息,除非你要不经意错误。
· 为各级条系统错误信息定义好系统错误文本以便include。

  1. 书写规则

3.1. 大括号 {} 规则

以三种植重点的大括声泪俱下放置规则中,有少栽是可以领的,如下的首先种植是不过好之:

· 将大括声泪俱下放置在首要词下方的跟列处:
if ($condition) while ($condition)
{ {
… …
} }
· 传统的UNIX的括号规则是,首括号与重大词同行,尾括号及重大字同列:
if ($condition) { while ($condition) {
… …
} }

理由

·
引起强烈争论之非原则的题目而经过折衷的办法缓解,两栽方式任意一种植都是好接受之,然而对大部分人口吧又爱第一栽。原因即是心理研究上范畴的事物了。
对此再次爱第一栽还存有更多之案由。如果您使用的字符编辑器支持括号匹配功能的说话(例如vi),最紧要的即使是发生一个吓之样式。为什么?我们说当你生出雷同雅块的先后同时想清楚就无异杀块程序是于何处了之言语。你先换到起的括号,按下按钮编辑器就会见找到与的相应的结括号,例如:
if ($very_long_condition && $second_very_long_condition)
{

}
else if (…)
{

}

自一个先后块移动及其它一个主次块就需要因此光标和而的括号匹配键就好了,不欲寻找匹配的括号。

3.2. 缩进/制表符/空格 规则

· 使用制表符缩进。
· 使用三顶四只空格为每层次缩进。
·
不再使用如同有要就是缩排的章程。对于极端可怜缩进层数,并无一个永恒的规规矩矩,假如缩进层数大于四要么五层的当儿,你可以设想在用代码因数分解(factoring
out code)。
理由
· 许多编程者支持制表符。
· 当人们使用差异太非常的制表符标准吧,会使阅读代码变得不行讨厌。
·
如此多的口乐意限定最特别之缩进层数,它一般没有给看作是平等桩工作。我们深信程序员们会面明智的挑嵌套的深。
例如
function func()
{
if (something bad)
{
if (another thing bad)
{
while (more input)
{
}
}
}
}

3.3. 小括哀号、关键词以及函数 规则

· 不要把小括号和重大词紧贴于同,要用空格隔开它。
· 不要拿小括号以及函数名紧贴在联名。
· 除非必要,不要在Return返回语句被动用小括号。
理由
·
关键字不是函数。如果小括号紧贴在函数叫作及主要字,二者很爱吃当作是一环扣一环的。
例如
if (condition)
{
}

while (condition)
{
}

strcmp($s, $s1);

return 1;

3.4. 别在目标架构函数惨遭召开实际的工作

变动当目标架构构造函数中举行实在的行事,
构造函数应该包含变量的初始化和(或)不见面有失败的操作。

 

理由
· 构造不可知返回错误 。

例如
class Device
{
function Device() { /* initialize and other stuff */ }
function Open() { return FAIL; }
};

$dev = new Device;
if (FAIL == $dev->Open()) exit(1);

3.5. If Then Else 格式

布局
即时是因为程序员决定。不同的花括号样式会发生若干微不同的样观。一个通用方是:
if (条件1) // 注释
{
}
else if (条件2) // 注释
{
}
else // 注释
{
}
而你生因此到else if
语句的话,通常最有一个else块以用于拍卖不处理到之任何情形。可以的言辞放一个笔录信息注释在else处,即使以else没有任何的动作。
标准格式
老是用恒量放在等号/不齐号的左手,例如:
if ( 6 == $errorNum ) …
一个缘故是使你当等式中漏了一个等号,语法检查器会为您报错。第二单由是你能即刻找到数值而非是当您的表达式的后找到它们。需要或多或少时空来习惯这格式,但是它实在非常有因此。

3.6. switch 格式

·
当一个case块处理后,直接改动至下一个case块处理,在斯case块的最终当加上注释。
· default
case总该在,它应当无深受到达,然而一旦到了即会硌一个左。
· 如果你若创一个变量,那即便拿富有的代码放在块被。
例如
switch (…)
{
case 1:

// FALL THROUGH
case 2:
{
$v = get_week_number();

}
break;

default:
}

3.7. continue,break 和 ? 的使用

3.7.1. Continue 和 Break
Continue 和 break 其实是变相的藏匿的 goto方法。
Continue 和 break 像 goto
一样,它们当代码中凡是生魔力的,所以要是厉行节约(尽可能少)的用它。使用了立等同简的魔法,由于有免公开的由,读者以会晤受定向到只有上帝才理解的地方失去。
Continue有个别只基本点的问题:
· 它可以绕了测试条件。
· 它好绕了等/不等表达式。
探下面的事例,考虑一下问题都以何方来:
while (TRUE)
{

// A lot of code

if (/* some condition */) {
continue;
}

// A lot of code

if ( $i++ > STOP_VALUE) break;
}
注意:”A lot of
code”是要的,这是为着吃程序员们未可知那么爱之检索来错误。
经过上述之例证,我们得得出更进一步的规则:continue 和 break
混合使用是滋生灾难的正确性方法。
3.7.2. ?:
劳动在于人们往往试着当 ? 和 :
之间塞满了过多底代码。以下的是片鲜明的连年规则:
· 把条件放在括号内为要它和其余的代码相分离。
· 如果可能的话,动作可以就此简单的函数。
· 把所召开的动作,“?”,“:”放在不同之行,除非他们可了解的位于同一行。
例如
(condition) ? funct1() : func2();

or

(condition)
? long statement
: another long statement;

3.8. 宣称块的定点

· 声明代码块需要针对旅。
理由
· 清晰。
· 变量初始化的好像代码块应该列表。
· &应贴近类型,而不是变量名。
例如
var $mDate
var& $mrDate
var& $mrName
var $mName

$mDate = 0;
$mrDate = NULL;
$mrName = 0;
$mName = NULL;

3.9. 每行一个讲话

只有这些告诉句有十分细心的维系,否则每行只写一个话。

3.10. 短方法

方法代码要限量于同一页内。

3.11. 记下有的空语句

连续记录下for或者是while的空块语句,以便了解的亮该段代码是脱了,还是有意不写的。

while ($dest++ = $src++)
; // VOID

3.12. 毫无使用缺省方法测试不零值

不用采用缺省值测试不零值,也不怕是动:

if (FAIL != f())
于脚的不二法门好:

if (f())

即使 FAIL 可以分包 0 值
,也就是是PHP认为false的意味。在某人决定用-1代替0作为黄返回值的时段,一个显式的测试就可以帮而了。就终于比较值未会见变吧应该使用显式的较;例如:if
(!($bufsize % strlen($str)))应该写成:if (($bufsize % strlen($str)) ==
0)以表示测试的数值(不是布尔)型。一个常来问题之地方便是利用strcmp来测试一个字符等式,结果永远也非会见当缺省值。
无零测试用基于缺省值的做法,那么任何函数或表达式就会被以下的界定:
· 只能回到回0表示失败,不可知吧/有外的价值。
·
命名以便为一个确(true)的返回值是纯属显然的,调用函数IsValid()而无是Checkvalid()。

3.13. 布尔逻辑类型

大部分函数在FALSE的时回来回0,但是达非0值就象征TRUE,因而不用为此1(TRUE,YES,诸如此类)等式检测一个布尔值,应该用0(FALSE,NO,诸如此类)的不等式来替代:

if (TRUE == func()) { …
应该写成:

if (FALSE != func()) { …

3.14. 寻常避免嵌入式的赋值

有时在少数地方我们可以看出嵌入式赋值的言语,那些组织不是一个较好的少冗余,可读**愈之不二法门。

while ($a != ($c = getchar()))
{
process the character
}
++和–操作符类似于赋值语句。因此,出于许多之目的,在运函数的时刻会有副作用。使用嵌入式赋值提高运行时**能够是唯恐的。无论怎样,程序员在采取嵌入式赋值语句时需考虑于提高之快跟削减的但保护**两者间加以权衡。例如:

a = b + c;
d = a + r;
不用写成:

d = (a = b + c) + r;

虽然后者可以省去一个周期。但以遥远来拘禁,随着程序的维护费用渐渐增长,程序的编者对代码渐渐忘却,就会见减小在成熟期底极致优化所得。

  1. 助和共享

4.1. 起用您及其他人的艰苦工作

逾工程的录取在尚未一个通用结构的状下几乎是免可能的。对象符合他们共处的劳务需要,不同之经过具有不同之劳动要求环境,这使对象又用变得可怜拮据。
支出一个通用结构要先花费许多底努力来设计。当全力以赴不成事之当儿,无论由什么由,有几栽办法推荐应用:

4.2. 请教!给群组发Email求助

夫大概的道充分少吃使用。因为有些程序员们认为要他往其他人求助,会显得融洽水平不及,这多笨啊!做新的幽默之办事,不要同通又同样普的举行别人就召开了之东西。
假若您待或多或少事项的源代码,如果已经发生某个人做了之言语,就为群组发email求助。结果会死惊喜哦!
在许多杀之群组中,个人往往不知底其他人在论及啊。你还是可以发现有人在检索有东西做,并且自愿为你写代码,如果人们以协同坐班,外面就是到底起一个金矿。

4.3. 告诉!当您当干活的当儿,把其报告所有人

使您开了哟但选用的事物的话,让其他人知道。别害羞,也无须为保护自豪感而将您的干活战果藏起来。一旦养成共享工作成果的惯,每个人且见面获更多。

4.4. 袖珍代码库

对此代码用,一个广的题材即是众人切莫起她们开了之代码中做库。一个不过选用的接近可能正隐藏于一个序目录并且永不会发被分享的感动,因为程序员不会见管看似分拆出来参加库中。
如此这般的内一个缘故纵然是众人切莫爱开一个小库,对小库有一对请勿科学感觉。把如此的感到克服掉吧,电脑才无关注而闹些许个仓库呢。
一旦你出一些代码可以用,而且无能够放入一个曾经有的库中,那么即便做一个初的堆栈吧。如果人们的确考虑录用的话,库不会见于生丰富的一段时间里保持那么有些之。

4.5. 知识库

诸多庄无掌握现有什么代码可用,而且大多数程序员仍然没有通过联系他们就举行过了什么,或者直接于询问现存什么代码可用。解决这个的点子是起一个可用之知识库。
大好的状况是,程序员可以交一个WEB页,浏览或者查询打包的知识库列表,找到她们所设的。建立一个程序员可以自动保护的知识库系统,是一个特别科学的做法。如果来一个专程的领队来当保护这个知识库,那本更好。
其他一样种植艺术是电动的起代码中发出知识库的做法。把通用的切近、方法和标头(subsystem
headers)作为手册或者是知识库的一个条文。

  1. 题注释

5.1. 说一个故事

拿您的笺注当作描述系统的一个故事。并且令你的诠释能吃机器解析后,以定点的格式推广至手册中错过。类的注释是故事的同有些,方法的名、方法的注解、方法的贯彻为是故事一样有。所有的这些部分编制在并,使得人们以今后的流年里会准确的亮你提到了呀,为什么这么做。

5.2. 归档注释

注解的只要归档才发含义,否则,假如在一个地方放平漫长注释描述而做了哟选择跟而干吗如此做,只有考古学家才会发现立即是极其实用的音。(如何归档另行规范)

5.3. 诠释结构

工的诸部分还发特定的诠释结构。
程序中之注解,这里吃出示例作为标准,注释中盖 * @
为重要字的启幕,以:为注释关键字最后。

5.3.1. 预定义关键字

关键字 含义
Purpose 表示类、属**、方法而做来什么或者什么意思。
Package Name 类名
Author 作者
Modifications 修改记录(编号规则吧“No”+日期+“-”+序号)
See 参考
Method Name 方法名
Parameter 参数称作(包括项目)
Return 返回值(包括项目)
Attribute/Variable Name 属**/变量名
Type 属**/变量类型

5.3.2. 类的注解

/**
* @ Purpose:
* 访问数据库的好像,以ODBC作为通用访问接口
* @Package Name: Database
* @Author: Forrest Gump gump@crtvu.edu.cn
* @Modifications:
* No20020523-100:
* odbc_fetch_into()参数位置第二跟老三独岗位调换
* John Johnson John@crtvu.edu.cn
* @See: (参照)
*/
class Database
{
……
}

5.3.3. 方注释

/**
* @Purpose:
* 执行同一涂鸦查询
* @Method Name: Query()
* @Parameter: string $queryStr SQL查询字符串
* @Return: mixed 查询返回值(结果集对象)
*/
function($queryStr){……}

5.3.4. 属**或者变量注释

/**
* @Purpose:
* 数据库连接用户称
* @Attribute/Variable Name: mDbUserName
* @Type: string
*/
var mDbUserName;

5.3.5. if (0)来诠释表代码块

奇迹要注释大段的测试代码,最简单易行的法门就是动if (0)块:
function example()
{
great looking code

if (0) {
lots of code
}

more code
}
您莫克运用/**/,因为注释内部未能够包含注释,而大段的顺序中可以分包注释。

5.3.6. 索引文档

抱有的目录下还急需有所README文档,其中囊括:
· 该目录的职能及其包含内容
·
一个针对性每一样文本之在线验证(带有link),每一个证通常还相应提取文件标头的片段属于**名字。
· 包括安装、使用说明
· 指导人们怎么连接相关资源:
o 源文件目录
o 在线文档
o 纸文档
o 设计文档
· 其他对读者出帮助的东西
考虑一下,当每个原有的工人员倒了,在6单月内来之一个新人,那个孤独受惊吓的探险者通过任何工程的源代码目录树,阅读说明文件,源文件的标头说明等等做为地图,他应该产生能力穿越所有工程。

  1. 其他

· 采用面向对象的统筹方法;

理由
肯定这是无与伦比相仿人们自然想的艺术,可能前期会觉得没有一直开来得抢,能否试着保留自己之看法?好戏在后头!

· 类的概念采用一个文本一个接近,并且类名和文件称相同;

理由
o 越来越多的口接受了这种做法
o 事实证明这种措施让项目的逻辑结构还清晰

· 类定义文件被,定义体之外不得起诸如echo、print等出口语句;

理由
并发这样的说话,应该当出现bug来拘禁。

· 输出网页的页面不出现SQL语句

理由
即时是n层结构的编程思想所与,每层的天职不同,虽然可越权行使,可能这么充分高效,但咱无赞成这么干。

· 进行SQL执行之多少必须进行有效**检测

特殊符号:
对于MS SQL Server,’%_[ ]
这些标记都是于开SQL语句被的与众不同意义字符,在SQL执行前用对这些字符进行拍卖。
剧本符号:
于PHP脚本标记,如<??><%%><?php?><script
lang<script
language=”php”></script>,在入数据库前需要检测处理。
理由
立即是数据库编程的一个预定,很多参考书上也是这么说,这里需要强调一下。

· 在HTML网页中尽量不要过插PHP代码

循环代码和纯变量输出(类似于<?=$UserName?>)除外。
理由
o
需要证实的是咱做事的上游,页面设计者的行事,假如在页面中过插代码,将损坏结构,这应该是咱们要避免的。
o 于这边的PHP代码只当显示,多余的代码显然是匪应有的。

· 没有意义的数字

一个当源代码中采用了之赤裸裸的数字是不可思议的数字,因为包括作者,在三个月内,没人她的义。例如:
if (22 == $foo) { start_thermo_nuclear_war(); }
else if (19 == $foo) { refund_lotso_money(); }
else if (16 == $foo) { infinite_loop(); }
else { cry_cause_im_lost(); }
每当上例中22暨19之含义是呀吧?如果一个数字改变了,或者这些数字只是简短的左,你晤面怎么想?
利用不可思议的数字是该程序员是业余选手的基本点标志.
汝该用define()来被你想表示某样东西的数值一个真的讳,而不是用赤裸裸的数字,例如:
define(“PRESIDENT_WENT_CRAZY”, “22”);
define(“WE_GOOFED”, “19”);
define(“THEY_DIDNT_PAY”, “16”);

if (PRESIDENT_WENT_CRAZY == $foo) { start_thermo_nuclear_war(); }
else if (WE_GOOFED == $foo) { refund_lotso_money(); }
else if (THEY_DIDNT_PAY == $foo) { infinite_loop(); }
else { happy_days_i_know_why_im_here(); }
今天未是易得更好了么?

 

  1. PHP文件扩展名

大面积的PHP文件之恢宏名有:html, .php, .php3, .php4, .phtml, .inc,
.class…
这边我们约定:

· 所有浏览者可见页面使用.html
· 所有类、函数库文件使用.php

理由

· 扩展名描述的凡那种数据是用户用会晤接受的。PHP是分解吗HTML的。

  1. PHP代码标记

联用<?php ?>,只输出变量时<?=$username?>

  1. 介绍
    1.1. 标准化的首要**
    极问题在少数方面达成叫每个人头痛,让人们都认为大家处于相同的程度。这有助于为这些建议以群底品种中频频演进,许多合作社花费了众多星期逐子字逐句的拓展争论。标准化不是特别之个人风格,它对本地改良是全然开放之。
    1.2. 优点
    当一个品类尝试着遵守公用的科班时,会出以下好处:
    · 程序员可以了解其他代码,弄清程序的景象
    · 新人可快的适应环境
    · 防止新接触php的人口出于节省时间的要,自创始一模拟风格并养成终生的习惯
    · 防止新接触php的食指一次次底犯同样的荒唐
    · 在相同的环境下,人们可减小犯错的机会
    · 程序员们来了同等的大敌
    1.3. 缺点
    · 因为专业由有休清楚php的丁所制定,所以标准通常看上去很傻
    · 因为专业和自己举行的不雷同,所以标准通常看上去分外傻
    · 标准降低了创造力
    · 标准以长期互相合作的人群遭受凡是没有必要之
    · 标准强迫太多之格式
    1.4. 讨论
    森品种之阅历会得出这样的下结论:采用编程标准可以假设项目更加顺畅地成功。标准是成功之基本点也?当然不。但其可以辅助我们,而且我们得我们能博得的装有的帮扶!老实说,对一个细节标准的多数争执主要是根自负思想。对一个客观之科班的不行少决定能让说吧凡紧缺技术**的言辞,那只有是脾胃之原委罢了。所以,要灵活的控制自负思想,记住,任何类型还在团队合作的奋力。
    1.5. 解释
    1.5.1. 正经履
    先是应以开小组的其中找有有的太要紧之要素,也许标准对而的景象还不够方便。它或许早就席卷了
    重要的题目,也可能还有人对其中的一些问题表示明确的不予。无论以啊状况下,只要最后胜利的讲话,人们以成熟之敞亮到之标准是合理的,然后另外的程序员们也会发觉它的成立**,并认为带在部分封存去按照这无异规范是值得的。如果无自觉的搭档,可以制定需求:标准肯定要由此代码的检验。如果无检的言语,这个解决方案就是一个成立于匪精确的根底及之平等不胜群可笑的口。
    1.5.2. 认同观点
  2. 随即不行;
  3. 或者可行吧,但是它们既未实用又俗;
  4. 顿时是确实,而且自呢报告过你哟;
  5. 这是自家先行想到的;
  6. 本来就是当如此。
    如您带来在否定的成见而来对事物的话,请您保持开放的琢磨。你本可做出它是废话的结论,但是做出结论的计就是是您要使能经受不同的沉思。请你被好一点年华错开就它。
    1.5.3. 档次的季只级次
  7. 数据库结构
  8. 设计
  9. 数据层
  10. HTML层

  11. 命名规则

2.1. 确切的命名

命名是程序设计之核心。古人相信如果知道一个丁真的讳即会获取胜出于那个人以上的不可思议的力量。只要您为物想到是的讳,就会于您与后来的丁带比较代码更胜的力。别笑!
名字就是事物在它们所处之生态环境中一个长远而深远的结果。总的来说,只发生打探系统的程序员才能够为系统取出最适度的名。如果具有的命名都和该当相适合,则关乎清晰,含义可以推导得出,一般人之推论也克以预期中。
如若您意识你的命名只有为数不多会和那个针对性许事物相配合的语,
最好或再度好好重新探您的筹划吧。

2.2. 类命名

· 在呢接近(class
)命名前率先要明其是啊。如果由此类名的供的线索,你或想不起这个近乎是什么的言语,那么您的筹划虽还开的匪足够好。
·
超过三只词做的混合名是便于导致系统依次实体间的模糊,再望您的筹划,尝试使用(CRC
Session card)看看该命名所对应之实业是否有那么多的效能。
·
对于派生类的命名该避免带其父类名的抓住,一个看似的讳只是跟它们本身有关,和它们的父类叫什么无关。
· 有时后缀名是有效的,例如:如果您的网以了代办(agent
),那么就算把某某部件命名吧“下载代理”(DownloadAgent)用以真正的传递信息。

2.3. 方式以及函数命名

·
通常每个方法以及函数都是行一个动作的,所以对她的命名该懂得的印证其是开什么的:用CheckForErrors()代替ErrorCheck(),用DumpDataToFile()代替DataFile()。这么做吧得假设效益跟数码化又不过分别的物体。
· 有时后缀名是行得通的:
o Max – 含义呢某实体所能给的最为可怜价值。
o Cnt – 一个周转中之计数变量的脚下价。
o Key – 键值。
比如:RetryMax 表示极度多重试次数,RetryCnt 表示目前重试次数。
· 有时前缀名是可行的:
o Is –
含义为咨询一个关于某样事物的题目。无论何时,当人们看来Is就见面懂得就是一个题材。
o Get – 含义为得到一个数值。
o Set – 含义为设定一个数值
例如:IsHitRetryLimit。

2.4. 缩写歌词并非全应用十分写字母

·
无论如何,当遇到以下情形,你可用首字母大写那余字母小写来顶替全部行使十分写字母的方来表示缩写词。
使用: GetHtmlStatistic.
不使用: GetHTMLStatistic.
理由
·
当命名含有缩略词时,人们似乎有很差之直觉。统一规定凡是最好好,这样一来,命名的含义就是全好预知了。
举个NetworkABCKey的例子,注意C是应是ABC里面的C还是key里面的C,这个是格外令人费解的。有些人无留心这些,其他人也十分讨厌这样。所以若见面在不同的代码里见到不同之平整,使得你免晓怎么去于其。
例如
class FluidOz // 不要写成 FluidOZ
class GetHtmlStatistic // 不要写成 GetHTMLStatistic

2.5. 类命名

· 使用特别写字母作为词的隔,其他的假名都采用小写
· 名字的首字母使用大写
· 不要使下划线(‘_’)
理由
· 根据广大之命名方式,大部分总人口觉着这样是太好的点子。
例如
class NameOneTwo
class Name

2.6. 类库命名

·
目前命名空间在更为普遍的受应用,以避免不同厂商和集团类库间的类名冲突。
·
当尚未利用命名空间的时,为了避免类名冲突,一般的做法是于类名前增长特殊的前缀,两独字符就可了,当然多用部分会晤重好。
例如
John Johnson的数据结构类库可以为此Jj做吧前缀,如下:
class JjLinkList
{
}
其它一样种折中法是树立涵盖类库目录(事实上Java也是如此做的),以死之目代表不同的命名空间。
例如
Microsoft的数据库相关类库可以于:
/classes/com/Microsoft/ Database/DbConn.php
Apache的数据库相关类库可每当:
/classes/org/apache/Database/DbConn.php

2.7. 方式命名

· 采用和类似命名一致的平整
理由
· 使用具有不同规则之多数口意识立即是极好的让步办法。
例如
class NameOneTwo
{
function DoIt() {};
function HandleError() {};
}

2.8. 类属**命名

· 属**取名该以字符‘m’为前缀。
· 前缝‘m’后动让类命名一致的规则。
· ‘m’总是以名字的开起修饰作用,就比如盖‘r’开头表示援引一样。
理由
·
前缀’m’防止类属**暨措施名有任何冲突。你的方法名和属**名叫经常会特别相近,特别是存取元素。
例如
class NameOneTwo
{
function VarAbc() {};
function ErrorNumber() {};
var $mVarAbc;
var $mErrorNumber;
var $mrName;
}

2.9. 道被参数命名

· 第一单字符使用小写字母。
· 在首配符后的享有字都按照类命名规则首字符大写。
理由
· 可以分别方法被之形似变量。
· 你可以采用以及类名相似的名目而不致于发生重名冲突。
例如
class NameOneTwo
{
function StartYourEngines(
&$rSomeEngine,
&$rAnotherEngine);
}

2.10. 变量命名

· 所有字母都以小写
· 使用’_’作为每个词的交界。
理由
· 通过就无异路,代码中变量的作用域是鲜明的。
· 所有的变量在代码中都扣留起不同,容易辨别。
例如
function HandleError($errorNumber)
{
$error = OsErr($errorNumber);
$time_of_error = OsErr->GetTimeOfError();
$error_processor = OsErr->GetErrorProcessor();
}

2.11. 援变量和函数返回引用

· 引用得带来‘r’前缀
理由
· 使得项目不同之变量容易辨认
· 它可规定谁方法返回可转移对象,哪个方法返回不可变更对象。
例如
class Test
{
var mrStatus;
function DoSomething(&$rStatus) {};
function &rStatus() {};
}

2.12. 全局变量

· 全局变量应该带前缀‘g’。
理由
· 知道一个变量的作用域是好重大之。
例如
global $gLog;
global &$grLog;

2.13. 定义命名 / 全局常量

· 全局常量用’_’分隔每个单词。
理由
随即是命名全局常量的民俗。你要小心不要和另外的概念相冲突。
例如
define(“A_GLOBAL_CONSTANT”, “Hello world!”);

2.14. 静态变量

· 静态变量应该带前缀‘s’。
理由
· 知道一个变量的作用域是坏主要之。
例如
function test()
{
static $msStatus = 0;
}

2.15. 函数命名

· 函数名下C GNU的老办法,所有的字母使用小写字母,使用’_’分割单词。
理由
· 这样可以还便于区分相关联的类名。
例如
function some_bloody_function()
{
}

2.16. 荒唐返回检测规则

· 检查有的体系调用的错误信息,除非您如不经意错误。
· 为各个条系统错误信息定义好系统错误文本以便include。

  1. 书写规则

3.1. 大括号 {} 规则

每当三栽重点的大括声泪俱下放置规则中,有有限种是足以承受之,如下的第一栽是绝好之:
· 将大括声泪俱下放置在关键词下方的以及列处:
if ($condition) while ($condition)
{ {
… …
} }
· 传统的UNIX的括号规则是,首括号及重点词同行,尾括号以及根本字同列:
if ($condition) { while ($condition) {
… …
} }
理由
·
引起热烈争论的非原则的题材而经折衷的不二法门化解,两种方法任意一栽都是可以接受之,然而对大多数丁吧更欣赏第一栽。原因就是心理研究学习范畴的事物了。
对再次爱第一栽还兼具更多的原因。如果你运的字符编辑器支持括号匹配功能的讲话(例如vi),最根本之便是出一个吓之体制。为什么?我们说当你产生相同大块的次序同时想知道就同一怪块程序是以何方了之说话。你先易到开始的括号,按下按钮编辑器就会找到与的相应的了括号,例如:
if ($very_long_condition && $second_very_long_condition)
{

}
else if (…)
{

}
从今一个次块移动到任何一个序块就需要用光标和您的括号匹配键就足以了,不需要寻找匹配的括号。

3.2. 缩进/制表符/空格 规则

· 使用制表符缩进。
· 使用三到四个空格为各个层次缩进。
·
不再采用如同有亟待就缩排的主意。对于极端深缩进层数,并没一个恒定的规矩,假如缩进层数大于四还是五层的时刻,你可考虑着将代码因数分解(factoring
out code)。
理由
· 许多编程者支持制表符。
· 当人们以差异太可怜之制表符标准吧,会要阅读代码变得死为难。
·
如此多之总人口甘愿限定最要命之缩进层数,它便没有为作为是千篇一律宗工作。我们信任程序员们见面明智的选择嵌套的深度。
例如
function func()
{
if (something bad)
{
if (another thing bad)
{
while (more input)
{
}
}
}
}

3.3. 小括号、关键词和函数 规则

· 不要管小括号以及要词紧贴于共,要因此空格隔开它。
· 不要管小括号及函数名紧贴于一块。
· 除非必要,不要以Return返回语句被行使小括号。
理由
·
关键字勿是函数。如果小括号紧贴正函数名和要害字,二者很易让视作是紧密的。
例如
if (condition)
{
}

while (condition)
{
}

strcmp($s, $s1);

return 1;

3.4. 别在对象架构函数着举行实在的劳作

变化在对象架构构造函数中开实际的做事,
构造函数应该包含变量的初始化和(或)不会见生出失败的操作。
理由
· 构造不克回错误 。
例如
class Device
{
function Device() { /* initialize and other stuff */ }
function Open() { return FAIL; }
};

$dev = new Device;
if (FAIL == $dev->Open()) exit(1);

3.5. If Then Else 格式

布局
立马由程序员决定。不同之花括号样式会来若干微不同的样观。一个通用方是:
if (条件1) // 注释
{
}
else if (条件2) // 注释
{
}
else // 注释
{
}
假定您生出因此到else if
语句子的话,通常最有一个else块以用来拍卖不处理及之旁情况。可以的讲话放一个记录信息注释在else处,即使在else没有外的动作。
格格式
连年以恒量放在等号/不抵号的左边,例如:
if ( 6 == $errorNum ) …
一个因是要你于等式中渗透了一个等号,语法检查器会为您报错。第二个因是你能够立刻找到数值而非是于你的表达式的末端找到它们。需要或多或少时空来习惯这格式,但是她确实怪有因此。

3.6. switch 格式

·
当一个case块处理后,直接改动至下一个case块处理,在这case块的尾声应长注释。
· default
case总应该存在,它应该不被到达,然而要达了就是会接触一个破绽百出。
· 如果你而创建一个变量,那就是管持有的代码放在块被。
例如
switch (…)
{
case 1:

// FALL THROUGH
case 2:
{
$v = get_week_number();

}
break;

default:
}

3.7. continue,break 和 ? 的使用

3.7.1. Continue 和 Break
Continue 和 break 其实是变相的隐没的 goto方法。
Continue 和 break 像 goto
一样,它们以代码中凡起魔力的,所以只要刻苦(尽可能少)的用其。使用了即同样简练的魔法,由于有休明之由来,读者以会给定向到只有上帝才了解的地方去。
Continue有个别独第一的题材:
· 它好绕了测试条件。
· 它好绕了等/不等表达式。
看下面的例子,考虑一下问题且以何方来:
while (TRUE)
{

// A lot of code

if (/* some condition */) {
continue;
}

// A lot of code

if ( $i++ > STOP_VALUE) break;
}
顾:”A lot of
code”是必的,这是为让程序员们不可知那么爱之搜寻有荒唐。
通过上述之事例,我们得得出更进一步的条条框框:continue 和 break
混合使用是滋生灾难的对方法。
3.7.2. ?:
累在于人们频繁试着以 ? 和 :
之间塞满了累累之代码。以下的凡部分清楚的连接规则:
· 把准在括号内盖使它们跟其它的代码相分离。
· 如果可能吧,动作可为此简易的函数。
· 把所召开的动作,“?”,“:”放在不同的履行,除非他们好领略的厕同一行。
例如
(condition) ? funct1() : func2();

or

(condition)
? long statement
: another long statement;

3.8. 声称块的定点

· 声明代码块需要针对伙同。
理由
· 清晰。
· 变量初始化的好像代码块应该列表。
· &应贴近类型,而休是变量名。
例如
var $mDate
var& $mrDate
var& $mrName
var $mName

$mDate = 0;
$mrDate = NULL;
$mrName = 0;
$mName = NULL;

3.9. 每行一个言

只有这些告诉句有好密切的维系,否则每行只写一个言语。

3.10. 短方法

方法代码要限量于相同页内。

3.11. 记录有的空语句

连记录下for或者是while的空块语句,以便掌握的理解该段代码是脱了,还是成心不写的。

while ($dest++ = $src++)
; // VOID

3.12. 不要采用缺省方法测试不零值

毫无以缺省值测试不零值,也即是采取:

if (FAIL != f())
于下的法好:

if (f())

即便 FAIL 可以蕴涵 0 值
,也尽管是PHP认为false的表示。在某人决定用-1代替0作为黄返回值的时光,一个显式的测试就足以扶持您了。就到底比较值未会见转移吧当下显式的于;例如:if
(!($bufsize % strlen($str)))应该写成:if (($bufsize % strlen($str)) ==
0)以表示测试的数值(不是布尔)型。一个时不时产生问题的地方就是行使strcmp来测试一个字符等式,结果永远为不见面当缺省值。
无零测试用基于缺省值的做法,那么其它函数或表达式就会蒙以下的限定:
· 只能回去回0表示失败,不可知也/有任何的值。
·
命名以便为一个审(true)的返回值是纯属显然的,调用函数IsValid()而休是Checkvalid()。

3.13. 布尔逻辑类型

大多数函数在FALSE的早晚回来回0,但是达非0值就表示TRUE,因而不用用1(TRUE,YES,诸如此类)等式检测一个布尔值,应该用0(FALSE,NO,诸如此类)的不等式来替:

if (TRUE == func()) { …
该写成:

if (FALSE != func()) { …

3.14. 不足为奇避免嵌入式的赋值

突发性在某些地方我们得望嵌入式赋值的言语,那些组织不是一个较好的少冗余,可读**赛的措施。

while ($a != ($c = getchar()))
{
process the character
}
++和–操作符类似于赋值语句。因此,出于许多底目的,在使用函数的时节会发生副作用。使用嵌入式赋值提高运行时**可知是唯恐的。无论怎样,程序员在动用嵌入式赋值语句时需要考虑以加强之快及削减的但是保护**两头间加以权衡。例如:

a = b + c;
d = a + r;
不用写成:

d = (a = b + c) + r;

虽说后者可以省一个周期。但在永来拘禁,随着程序的维护费用渐渐增长,程序的编者对代码渐渐忘却,就见面压缩在成熟期之尽优化所得。

  1. 支援和共享

4.1. 引用您与其他人的紧巴巴工作

跨工程的选定在从来不一个通用结构的情状下几是匪容许的。对象符合他们共处的劳动要求,不同的过程具有不同之服务需环境,这如对象又用变得要命窘迫。
开一个通用结构需要先花费许多之极力来规划。当全力以赴不成功之时段,无论由什么由,有几乎种方法推荐应用:

4.2. 请教!给群组发Email求助

夫简单的方法充分少给用。因为有些程序员们觉得只要他为其他人求助,会展示融洽水平没有,这基本上傻啊!做新的妙趣横生的劳作,不要同全套又平等全套的开别人已经开了之物。
假如您用或多或少事项的源代码,如果既出有人做了之讲话,就向群组发email求助。结果碰头特别惊喜哦!
每当广大百般的群组中,个人往往无明白其他人在关乎啊。你还是可窥见有人以搜索有东西做,并且自愿为汝勾勒代码,如果人们在共干活,外面就是到底有一个宝藏。

4.3. 告诉!当你当干活的当儿,把它们报告所有人

如果你做了呀而选用的东西来说,让其他人知道。别害羞,也绝不以保障自豪感而把你的干活战果藏起来。一旦养成共享工作成果的惯,每个人犹见面获得更多。

4.4. 小型代码库

于代码用,一个广泛的题目就是是人们不由他们举行了之代码中做库。一个而选用的类可能正躲于一个程序目录并且毫不会出叫分享的触动,因为程序员不见面管看似分拆出来加入库中。
如此这般的内一个缘故即是人人切莫爱好做一个小库,对小库有局部不科学感觉。把这样的发克服掉吧,电脑才未体贴而有多少个仓库呢。
假设你产生一部分代码可以引用,而且不克放入一个曾经在的库中,那么就召开一个新的库房吧。如果人们真正考虑用的话,库不见面在那个丰富之一段时间里保持那么有些的。

4.5. 知识库

多商店无理解现有什么代码可用,而且大多数程序员仍然没经联系他们早就做了了什么,或者直接在询问现存什么代码可用。解决这个的章程是来一个可用之知识库。
优秀的状是,程序员可以交一个WEB页,浏览或者查询打包的知识库列表,找到她们所设的。建立一个程序员可以自动保护的知识库系统,是一个良科学的做法。如果产生一个特别的领队来负担保护这个知识库,那本更好。
别一样种植艺术是自行的起代码中起知识库的做法。把通用的切近、方法与标头(subsystem
headers)作为手册或者是知识库的一个条目。

  1. 书写注释

5.1. 说一个故事

把你的诠释当作描述系统的一个故事。并且让你的笺注能让机器解析后,以稳的格式推广至手册中失。类的注解是故事之均等组成部分,方法的称号、方法的注释、方法的兑现呢是故事一样有的。所有的这些有编制在一块,使得人们在此后的时空里能准确之知你涉嫌了哟,为什么这么做。

5.2. 归档注释

注的如果归档才来意义,否则,假如在一个地方放平长条注释描述而做了哟选择跟公怎么这么做,只有考古学家才能够窥见立即是最为实惠之信息。(如何归档另行规范)

5.3. 注结构

工程的各有都出一定的注解结构。
程序中之笺注,这里为出示例作为正式,注释中坐 * @
也重点字的初始,以:为注释关键字最后。

5.3.1. 预定义关键字

关键字 含义
Purpose 表示类、属**、方法而召开来什么或者什么意思。
Package Name 类名
Author 作者
Modifications 修改记录(编号规则吧“No”+日期+“-”+序号)
See 参考
Method Name 方法名
Parameter 参数名为(包括项目)
Return 返回值(包括项目)
Attribute/Variable Name 属**/变量名
Type 属**/变量类型

5.3.2. 类的诠释

/**
* @ Purpose:
* 访问数据库的切近,以ODBC作为通用访问接口
* @Package Name: Database
* @Author: Forrest Gump gump@crtvu.edu.cn
* @Modifications:
* No20020523-100:
* odbc_fetch_into()参数位置第二以及老三只位置调换
* John Johnson John@crtvu.edu.cn
* @See: (参照)
*/
class Database
{
……
}

5.3.3. 艺术注释

/**
* @Purpose:
* 执行同一差询问
* @Method Name: Query()
* @Parameter: string $queryStr SQL查询字符串
* @Return: mixed 查询返回值(结果集对象)
*/
function($queryStr){……}

5.3.4. 属**抑或变量注释

/**
* @Purpose:
* 数据库连接用户称
* @Attribute/Variable Name: mDbUserName
* @Type: string
*/
var mDbUserName;

5.3.5. if (0)来诠释表代码块

偶尔需要注释大段的测试代码,最简单易行的法子就是是运用if (0)块:
function example()
{
great looking code

if (0) {
lots of code
}

more code
}
汝免能够运用/**/,因为注释内部未可知包含注释,而大段的次序中得分包注释。

5.3.6. 索引文档

怀有的目下还需具备README文档,其中包:
· 该目录的效果及其包含内容
·
一个针对各级一样文件之在线验证(带有link),每一个说明通常还当提取文件标头的一部分属于**名字。
· 包括安装、使用说明
· 指导人们如何连接相关资源:
o 源文件目录
o 在线文档
o 纸文档
o 设计文档
· 其他对读者来赞助的事物
考虑一下,当每个原有的工程人员走了,在6个月之内来的一个新娘,那个孤独受惊吓之探险者通过总体工程的源代码目录树,阅读说明文件,源文件之标头说明等等做为地图,他应有发生力量穿越全工程。

  1. 其他

· 采用面向对象的统筹方式;

理由
自然这是无限相近人们当然想的计,可能前期会以为无直接写来得赶紧,能否试着保留自己之见地?好戏在后边!

· 类的定义采用一个文书一个近似,并且类名和文书称相同;

理由
o 越来越多之人领了这种做法
o 事实证明这种办法使得项目之逻辑结构更清晰

· 类定义文件中,定义体之外不得出现诸如echo、print等出口语句;

理由
并发如此的言辞,应该当出现bug来拘禁。

· 输出网页的页面不出新SQL语句

理由
及时是n层结构的编程思想所与,每层的职责不同,虽然可越权行使,可能这么充分高效,但咱不赞成这么干。

· 进行SQL执行的多寡必须进行有效**检测

特殊符号:
对于MS SQL Server,’%_[ ]
这些标记都是于开SQL语句被的突出意义字符,在SQL执行前用对这些字符进行拍卖。
剧本符号:
对此PHP脚本标记,如<??><%%><?php?><script
lang<script
language=”php”></script>,在进数据库前需检测处理。
理由
立是数据库编程的一个预约,很多参考书上吗是如此说,这里要强调一下。

· 在HTML网页遭到尽量不要通过插PHP代码

循环代码和纯变量输出(类似于<?=$UserName?>)除外。
理由
o
需要验证的凡我们工作之上游,页面设计者的劳作,假如在页面中穿过插代码,将坏结构,这应当是我们得避免的。
o 以此地的PHP代码只承担显示,多余的代码显然是未应该的。

· 没有意义的数字

一个每当源代码中运用了的裸体的数字是不可思议的数字,因为包括作者,在三只月内,没人她的含义。例如:
if (22 == $foo) { start_thermo_nuclear_war(); }
else if (19 == $foo) { refund_lotso_money(); }
else if (16 == $foo) { infinite_loop(); }
else { cry_cause_im_lost(); }
于上例中22和19的意思是啊为?如果一个数字改变了,或者这些数字只是简单的不当,你晤面怎么想?
下不可思议的数字是该程序员是业余选手的根本标志.
而应有用define()来让你想表示某样东西的数值一个着实的讳,而无是以赤裸裸的数字,例如:
define(“PRESIDENT_WENT_CRAZY”, “22”);
define(“WE_GOOFED”, “19”);
define(“THEY_DIDNT_PAY”, “16”);

if (PRESIDENT_WENT_CRAZY == $foo) { start_thermo_nuclear_war(); }
else if (WE_GOOFED == $foo) { refund_lotso_money(); }
else if (THEY_DIDNT_PAY == $foo) { infinite_loop(); }
else { happy_days_i_know_why_im_here(); }
今天莫是更换得再好了么?

 

  1. PHP文件扩展名

广阔的PHP文件的扩展名有:html, .php, .php3, .php4, .phtml, .inc,
.class…
此处我们约定:

· 所有浏览者可见页面使用.html
· 所有类、函数库文件使用.php

理由

· 扩展名描述的凡那种数据是用户以会见吸收的。PHP是说为HTML的。

  1. PHP代码标记

合并采用<?php ?>,只输出变量时<?=$username?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图