必威体育app官网[转]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?>

Post Author: admin

发表评论

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