1.命名规则1.命名规则总结1)使用有意义的名字#goodif($currentYear>2009)...#badif($t>2009)...2)In缩写,只有首字母大写#goodfunctiongetHttpHost()#badfunctiongetHTTPHost()二、类命名1)类命名要用名词的单数形式,首字母大写,大小写是混合的。classSqlStatement{...}2)表示一组事物的类应该使用复数形式classSqlStatements{...}3)识别类型的开头比识别类型的结尾更容易对于一个变量对于已知类型,其名称以类型开头比以类型结尾更容易识别classErrorConnectionextendsError{//...}$arrCatids=array(1,2,3,4,5,6);$strCatids='1,2,3,4,5,6';4)接口的默认实现类可以以DefaultclassDefaultSqlBuilderextendsISqlBuilder{//...}开头3.接口命名接口的名称应该是以字母“I”开头的名词或形容词interfaceISqlEngine{}接口ISortable{}4.变量/属性命名1)属性名应以小写字母开头,使用驼峰规则。公共$userAuth;3)常量的名称必须全部大写,字母全部大写,单词之间用下划线隔开。常量SEARCH_GOOGLE=1;constSEARCH_YAHOO=2;4)命名一组对象时,应使用复数形式public$books;5)布尔变量不应使用负名称#goodpublic$isFound;公共$isEnough;#badpublic$isNotFound;公共$isNotEnough;6)在嵌套循环中,使用有意义且丰富的名称来命名循环控制变量#goodfor($row=0;$iinput('order_status');}}#自定义函数变量#这里传入的变量写成蛇形functionroute_url($route,$params,$option_params){//...}5.函数命名禁止拼音命名1)类函数名以小写字母开头,使用驼峰规则函数getCurrentYear()2)使用动词命名函数#动词表:add/edit/removebegin/endcreate/destroyfirst/lastget/releaseget/setincrement/decrementput/getlock/unlockopen/closemin/maxold/newstart/stopnext/previoussource/targetshow/hidesend/receivecut/pasteup/down#copula:is/hasfunctionstartDatabase()函数getDatabaseStatus()3)函数名类名或对象名可以省略以避免重复#goodclassFont{functiongetFamily();}#badclassFont{functiongetFontFamily();}4)单例类应该返回它们唯一的值classToolkit{privatestaticconsttoolkit=newToolkit();publicstaticfunctiongetInstance(){返回工具包;}}2.文件格式/tips1.空格适当使用空格可以有效提高代码的可读性1)使用空格的一般规则运算符,冒号前后要有一个空格。逗号和分号后面必须有一个空格#good$bit=$bitStart+$bitEnd;案例'someStr':mysqlConnection($config,$dbname);if($count>9)#bad$bit=$bitStart+$bitEnd;case'someStr':mysqlConnection($config,$dbname);if($count>9)2)逻辑单元应该用空行分隔functiondrawCapture(){$chars=getChars(5);//图像创建$img=imageCreate();//输出图像outputImage();}2.控制流程1)for,while,if语句的格式如下#forfor(init;condition;update){//...}#while(condition){//...}#ifif(条件){//...}否则如果(条件){//...}else{//...}2)循环/条件语句必须嵌套在'{','}'#goodif($i>0){$val++;}for($i=0;$i<$size;$i++){$val++;}#badfor($i=0;$i<$size;$i++)$val++;if($i>0)$val++;3)使用临时变量来避免复合条件语句#good$itemValid=$itemMoney>800&&$level>3&&$valid>0;如果($itemValid&&isReady()){显示();}#badif($itemMoney>800&&$level>3&&$valid>0&&isReady()){显示();}4)Switches语句应采用以下格式,每个分支必须明确注释switch(condition){case0://showsomethingbreak;default://thisissomecode}3.声明1)类/接口声明顺序类文档中语句的顺序。1.文档/评论2.类/接口声明3.常量4.静态变量顺序:[public,protected,(default),private]5.实例变量顺序:[public,protected,(default),private]6。构造函数__construct();7。Function函数;2)变量的声明应该在代码块的开头,而不是在它们使用的地方publicfunctionmethod(){$value=0;...对于(...){$value+=$num;}}4.Tips删除文件末尾的?>。php文件的典型标记以结尾,但在ZendFramework的php中不建议在文件末尾添加?>,因为之外的任何字符都将输出到网页,但里面的人不会。所以不在末尾加上?>可以防止php文件被恶意添加字符输出到网页。数组键在PHP中,使用不带引号的字符串作为数组键是合法的,但我们不希望这样——键应该始终用单引号括起来以避免混淆。请注意,这是使用A字符串,而不是使用变量作为键//错误$foo=$assoc_array[blah];//对$foo=$assoc_array['blah'];//错误$foo=$assoc_array["$var"];//正确$foo=$assoc_array[$var];不要使用未初始化的变量//不正确的if($forum)...//正确的if(isset($forum))...//正确的if(isset($forum)&&$forum==5)避免使用in_array()onlargearrays避免在大型数组上使用in_array(),也避免在包含超过200个元素的数组的循环中使用此函数。in_array()可能非常耗费资源。对于小数组,影响可能很小,但在循环中检查大数组可能需要几秒钟。如果您确实需要此功能,请使用isset()来查找数组元素。其实键名就是用来查询键值的。调用isset($array[$var])会比in_array($var,array_keys($array))快很多。SQL脚本格式SQL代码往往会变得很长,如果不指定某种格式会很难理解。SQL代码一般写成如下格式,关键字换行:$sql='SELECT*<-onetab->FROM'。一些表。'<-一个标签->WHEREa=1<-两个标签->AND(b=2<-三个标签->ORb=3)<-一个标签->ORDERBYb';这是在说明符之后应用的制表示例:$sql='SELECT*FROM'。一些表。'其中a=1和(b=2或b=3)按b'排序;禁止使用以单个字母$tKey,$tVal5开头的变量。空行的使用记录当前元素的作者。@category指定一个类别将记录元素的包组织到@copyrightnamedate记录版权信息。@deprecatedversion将方法记录为已弃用。@example/path/to/example记录外部保存示例文件的位置。@exception记录方法抛出的异常-另请参阅@throws。@globaltype$globalvarname记录全局变量或它在函数或方法中的使用。@ignore防止元素的文档记录@高级开发人员的内部私有信息@linkURL@name全局变量名称指定变量的别名。例如$GLOBALS['myvariable']变成$myvariable@magicphpDocumentor标签}-.@package包名Documents一组相关的类和函数。@paramtype[$varname]description@returntypedescription此标记不应用于用void返回类型定义的构造函数或方法。@seeDocumentsanassociationtoanothermethodorclass.@sinceversion记录方法何时被添加到类。@static记录静态类或方法@staticvar记录静态变量在函数或类中的使用@subpackage@throws记录方法抛出的异常。@todo记录需要的东西稍后对代码进行处理。@vartype类变量的数据类型@version提供类或方法的版本号。附录C:版本变更v1.4(2016年10月07日)变更markdown格式,替换为Laravel编码格式V1.3(2015年4月19日)项目文件结构说明V1.2(2013年4月27日)单独项目publicpartV1.1(2013年4月2日)添加左格式内容Adddelete?>markV1.0(2012年11月7日)初始化规范