php编码规范

  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. HTML层

  5. 取名规则

 

2.1. 相宜的命名

取名是程序设计的着力。古人相信若是了然一个人真的的名字就会取得超过于那一个人以上的不堪设想的力量。只要你给事物想到正确的名字,就会给您以及后来的人带来比代码更强的能力。别笑!

名字就是东西在它所处的生态环境中一个经久不衰而意味深长的结果。总的来说,唯有了然系统的程序员才能为系统取出最合适的名字。要是拥有的命名都与其本来相契合,则关乎清晰,含义可以推导得出,一般人的臆度也能在预期之中。

比方你发觉你的命名唯有为数不多能和其对应事物相匹配的话,
最好或者重新好好再看看你的筹划呢。

2.2. 类命名

· 在为类(class
)命名前首先要明白它是哪些。假如经过类名的提供的线索,你仍然想不起这么些类是怎么着的话,那么您的计划就还做的不够好。

·
领先两个词组成的混合名是便于造成系统依次实体间的歪曲,再看看您的计划性,尝试运用(CRC
Session card)看看该命名所对应的实体是否拥有那么多的效率。

·
对于派生类的命名应该避免带其父类名的诱惑,一个类的名字只与它自己有关,和它的父类叫什么无关。

· 有时后缀名是行之有效的,例如:即使您的体系应用了代办(agent
),那么就把某部部件命名为“下载代理”(DownloadAgent)用以真正的传递音信。

2.3. 模式和函数命名

·
经常每个方法和函数都是实施一个动作的,所以对它们的命名应该清楚的辨证它们是做什么的:用CheckForErrors()代替ErrorCheck(),用DumpDataToFile()代替DataFile()。这么做也得以使效益和数目变成更可分其它物体。

· 有时后缀名是有效的:

o 马克斯 – 含义为某实体所能赋予的最大值。

o Cnt – 一个运作中的计数变量的当前值。

o Key – 键值。

比如说:Retry马克斯(Max) 表示最多重试次数,RetryCnt 代表目前重试次数。

· 有时前缀名是行之有效的:

o Is –
含义为问一个关于某样事物的题目。无论什么日期,当人们看来Is就会精通这是一个题材。

o Get – 含义为获取一个数值。

o Set – 含义为设定一个数值

例如:IsHitRetryLimit。

2.4. 缩写词并非所有行使大写字母

·
无论怎样,当境遇以下境况,你可以用首字母大写此外字母小写来代替全部拔取大写字母的情势来代表缩写词。

使用: GetHtmlStatistic.

不使用: GetHTMLStatistic.

理由

·
当命名含有缩略词时,人们似乎具备很是不同的直觉。统一规定是最好,这样一来,命名的意思就全盘可以预知了。

韦德娱乐1946手机版,举个NetworkABCKey的例证,注意C是应当是ABC里面的C仍然key里面的C,那些是很令人费解的。有些人忽略这多少个,其旁人却很看不惯那样。所以你会在不同的代码里看看不同的规则,使得你不领悟怎么去叫它。

例如

class FluidOz // 不要写成 FluidOZ

class GetHtmlStatistic // 不要写成 GetHTMLStatistic

2.5. 类命名

· 使用大写字母作为词的相间,其他的假名均接纳小写

· 名字的首字母使用大写

· 不要使用下划线(‘_’)

理由

· 按照众多的命名形式,大部分人觉得这样是最好的章程。

例如

class NameOneTwo

class Name

2.6. 类库命名

·
如今定名空间正在进一步普遍的被运用,以制止不同厂商和协会类库间的类名争论。

·
当尚未接纳命名空间的时候,为了制止类名争持,一般的做法是在类名前增长特另外前缀,六个字符就足以了,当然多用一些会更好。

例如

约翰 约翰逊(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地图