仓酷云
标题:
PHP编程:Zend Framework 的 PHP 编码尺度
[打印本页]
作者:
乐观
时间:
2015-1-16 22:15
标题:
PHP编程:Zend Framework 的 PHP 编码尺度
培训的第二阶段,开始了PHP语言语法结构和应用的学习。[摘自ZendFramework官方文档]
C.2.PHPFile文件格局
C.2.1.惯例
关于只包括有PHP代码的文件,停止标记("?>")是不同意存在的,PHP本身不必要("?>"),如许做,能够避免它的开端的被不测地注进响应。
主要:由__HALT_COMPILER()同意的恣意的二进制代码的内容被ZendFramework中的PHP文件或由它们发生的文件克制。这个功效的利用只对一些安装剧本开放。
C.2.2.缩进
缩进由四个空格构成,克制利用制表符TAB。
C.2.3.行的最年夜长度
一行80字符之内是对照符合,就是说,ZF的开辟者应该勉力在大概的情形下坚持每行代码少于80个字符,在有些情形下,长点也能够,但最多为120个字符。
C.2.4.行停止标记
行停止标记遵守Unix文本文件的商定,行必须以单个换行符(LF)停止。换行符在文件中暗示为10,或16进制的0x0A。
注:不要利用苹果操纵体系的回车(0x0D)或Windows电脑的回车换行组合如(0x0D,0x0A)。
C.3.定名商定
C.3.1.类
ZendFramework的类定名老是对应于其所属文件的目次布局的,ZF尺度库的根目次是“Zend/”,ZF出格(extras)库的根目次是"ZendX/",一切ZendFramework的类在其下按品级寄存。
类名只同意有字母数字字符,在年夜部分情形下不勉励利用数字。下划线只同意做路径分开符;比方Zend/Db/Table.php文件里对应的类称号是Zend_Db_Table。
假如类名包括多个单词,每一个单词的第一个字母必需年夜写,一连的年夜写是不同意的,比方“Zend_PDF”是不同意的,而"Zend_Pdf"是可承受的。
这些商定为ZendFramework界说了一个伪定名空间机制。假如对开辟者在他们的程序中实在可行,ZendFramework将接纳PHP定名空间特征(假如有的话)。
拜见在尺度和出格库中类名作为类名商定的例子。主要:依托ZF库睁开的代码,但又不是尺度或出格库的一部分(比方程序代码或不是Zend刊行的库),不要以"Zend_"或"ZendX_"开首。
C.3.2.文件名
关于别的文件,只要字母数字字符、下划线和短横线("-")可用,空格是相对不同意的。
包括任何PHP代码的任何文件应该以".php"扩大名开头,尽人皆知的视图剧本除外。上面这些例子给出ZendFramework类可承受的文件名:
Zend/Db.php
Zend/Controller/Front.php
Zend/View/Helper/FormRadio.php
文件名必需遵守上述的对应类名的划定规矩。
C.3.3.函数和办法
函数名只包括字母数字字符,下划线是不同意的。数字是同意的但年夜多半情形下不勉励。
函数名老是以小写开首,当函数名包括多个单词,每一个子的首字母必需年夜写,这就是所谓的“驼峰”格局。
我们一样平常勉励利用冗杂的名字,函数名应该长到足以申明函数的企图和举动。
这些是可承受的函数名的例子:
filterInput()
getElementById()
widgetFactory()
关于面向工具编程,实例或静态变量的会见器老是以"get"或"set"为前缀。在计划形式完成方面,如单态形式(singleton)或工场形式(factory),办法的名字应该包括形式的名字,如许名字更能形貌全部举动。
在工具中的办法,声明为"private"或"protected"的,称号的首字符必需是一个单个的下划线,这是独一的下划线在办法名字中的用法。声明为"public"的从不包括下划线。
全局函数(如:"floatingfunctions")同意但年夜多半情形下不勉励,倡议把这类函数封装到静态类里。
C.3.4.变量
变量只包括数字字母字符,年夜多半情形下不勉励利用数字,下划线不承受。
声明为"private"或"protected"的实例变量名必需以一个单个下划线开首,这是独一的下划线在程序中的用法,声明为"public"的不该当以下划线开首。
对函数名(见下面3.3节)一样,变量名总以小写字母开首并遵守“驼峰式”定名商定。
我们一样平常勉励利用冗杂的名字,如许简单了解代码,开辟者晓得把数据存到那里。除非在小轮回里,不勉励利用简便的名字如"$i"和"$n"。假如一个轮回凌驾20行代码,索引的变量名必需有个具有形貌意义的名字。
C.3.5.常量
常量包括数字字母字符和下划线,数字同意作为常量名。
常量名的一切字母必需年夜写。
常量中的单词必需以下划线分开,比方能够如许EMBED_SUPPRESS_EMBED_EXCEPTION但不准如许EMBED_SUPPRESSEMBEDEXCEPTION。
常量必需经由过程"const"界说为类的成员,激烈不勉励利用"define"界说的全局常量。
C.4.编码作风
C.4.1.PHP代码分别(Demarcation)
PHP代码老是用完全的尺度的PHP标签订界:
<?php
?>
短标签()是不同意的,只包括PHP代码的文件,不要停止标签(拜见SectionC.2.1,“惯例”)。
C.4.2.字符串
C.4.2.1.字符串笔墨
当字符串是笔墨(不包括变量),应该用单引号(apostrophe)来括起来:
$a=ExampleString;
C.4.2.2.包括单引号()的字符串笔墨
当笔墨字符串包括单引号(apostrophe)就用双引号括起来,出格在SQL语句中有效:
$sql="SELECT`id`,`name`from`people`WHERE`name`=FredOR`name`=Susan";
在本义单引号时,上述语法是首选的,由于很简单浏览。
C.4.2.3.变量交换
变量交换有上面这些情势:
$greeting="Hello$name,welcomeback!";
$greeting="Hello{$name},welcomeback!";
为坚持分歧,这个情势不同意:
$greeting="Hello${name},welcomeback!";
C.4.2.4.字符串联接
字符串必须用"."操纵符毗连,在它的前后加上空格以进步可读性:
$company=Zend..Technologies;
当用"."操纵符毗连字符串,勉励把代码能够分红多个行,也是为进步可读性。在这些例子中,每一个一连的行应该由whitespace来弥补,比方"."和"="对齐:
$sql="SELECT`id`,`name`FROM`people`"
."WHERE`name`=Susan"
."ORDERBY`name`ASC";
C.4.3.数组
C.4.3.1.数字索引数组
索引不克不及为正数,倡议数组索引从0入手下手。
当用array函数声明有索引的数组,在每一个逗号的前面距离空格以进步可读性:
$sampleArray=array(1,2,3,Zend,Studio);
能够用"array"声明多行有索引的数组,在每一个一连行的开首要用空格弥补对齐:
$sampleArray=array(1,2,3,Zend,Studio,
$a,$b,$c,
56.44,$d,500);
C.4.3.2.联系关系数组
当用声明联系关系数组,array我们勉励把代码分红多行,在每一个一连行的开首用空格弥补来对齐键和值:
$sampleArray=array(firstKey=>firstValue,
secondKey=>secondValue);
C.4.4.类
C.4.4.1.类的声明
用ZendFramework的定名商定来定名类。
花括号应该从类名下一行入手下手(the"onetruebrace"form)。
每一个类必需有一个切合PHPDocumentor尺度的文档块。
类中一切代码必须用四个空格的缩进。
每一个PHP文件中只要一个类。
放别的的代码到类里同意但不勉励。在如许的文件中,用两行空格来分开类和别的代码。
上面是个可承受的类的例子://4599506-4419658下次从这里入手下手
/**
*DocumentationBlockHere
*/
classSampleClass
{
//类的一切内容
//必须缩进四个空格
}
C.4.4.2.类成员变量
必需用ZendFramework的变量名商定来定名类成员变量。
变量的声明必需在类的顶部,在办法的上方声明。
不同意利用var(由于ZF是基于PHP5的),要用private、protected或public。间接会见public变量是同意的但不勉励,最好利用会见器(set/get)。
C.4.5.函数和办法
C.4.5.1.函数和办法声明
必需用ZendFramework的函数名商定来定名函数。
在类中的函数必需用private、protected或public声明它们的可见性。
象类一样,花括号从函数名的下一行入手下手(the"onetruebrace"form)。
函数名和括参数的圆括号两头没有空格。
激烈否决利用全局函数。
上面是可承受的在类中的函数声明的例子:
/**
*DocumentationBlockHere
*/
classFoo
{
/**
*DocumentationBlockHere
*/
publicfunctionbar()
{
//函数的一切内容
//必须缩进四个空格
}
}
注:传址(Pass-by-reference)是在办法声明中同意的独一的参数传送机制。
/**
*DocumentationBlockHere
*/
classFoo
{
/**
*DocumentationBlockHere
*/
publicfunctionbar(&$baz)
{}
}
传址在挪用时是严厉克制的。
前往值不克不及在圆括号中,这妨害可读性并且假如未来办法被修正成传址体例,代码会有成绩。
/**
*DocumentationBlockHere
*/
classFoo
{
/**
*WRONG
*/
publicfunctionbar()
{
return($this->bar);
}
/**
*RIGHT
*/
publicfunctionbar()
{
return$this->bar;
}
}
C.4.5.2.函数和办法的用法
函数的参数应该用逗号和紧接着的空格分隔,上面可承受的挪用的例子中的函数带有三个参数:
threeArguments(1,2,3);
传址体例在挪用的时分是严厉克制的,拜见函数的声明一节怎样准确利用函数的传址体例。
带无数组参数的函数,函数的挪用可包含"array"提醒并能够分红多行来进步可读性,同时,誊写数组的尺度仍旧合用:
threeArguments(array(1,2,3),2,3);
threeArguments(array(1,2,3,Zend,Studio,
$a,$b,$c,
56.44,$d,500),2,3);
C.4.6.把持语句
C.4.6.1.if/Else/Elseif
利用ifandelseif的把持语句在前提语句的圆括号前后都必需有一个空格。
在圆括号里的前提语句,操纵符必需用空格分隔,勉励利用多重圆括号以进步在庞大的前提中分别逻辑组合。
前花括号必需和前提语句在统一行,后花括号独自在最初一行,个中的内容用四个空格缩进。
if($a!=2){
$a=2;
}
对包含"elseif"或"else"的"if"语句,和"if"布局的格局相似,上面的例子示例"if"语句,包含"elseif"或"else"的格局商定:
if($a!=2){
$a=2;
}else{
$a=7;
}
if($a!=2){
$a=2;
}elseif($a==3){
$a=4;
}else{
$a=7;
}
在有些情形下,PHP同意这些语句不必花括号,但在(ZF)代码尺度里,它们("if"、"elseif"或"else"语句)必需利用花括号。
"elseif"是同意的但激烈不勉励,我们撑持"elseif"组合。
C.4.6.2.Switch
在"switch"布局里的把持语句在前提语句的圆括号前后必需都有一个单个的空格。
"switch"里的代码必需有四个空格缩进,在"case"里的代码再缩进四个空格。
switch($numPeople){
case1:
break;
case2:
break;
default:
break;
}
switch语句应该有default。
注:偶然候,在fallsthrough到下个case的case语句中不写breakorreturn很有效。为了区分于bug,任何case语句中,一切不写breakorreturn的中央应该有一个"//breakintentionallyomitted"如许的正文来标明break是存心疏忽的。
C.4.7.正文文档
C.4.7.1.格局
一切文档块("docblocks")必需和phpDocumentor格局兼容,phpDocumentor格局的形貌超越了本文档的局限,关于它的概况,参考:http://phpdoc.org/。
一切类文件必需在文件的顶部包括文件级("file-level")的docblock,在每一个类的顶部安排一个"class-level"的docblock。上面是一些例子:
C.4.7.2.文件
每一个包括PHP代码的文件必需最少在文件顶部的docblock包括这些phpDocumentor标签:
/**
*文件的冗长形貌
*
*文件的具体形貌(假如有的话)......
*
*LICENSE:一些license信息
*
*@copyrightCopyright(c)2005-2010ZendTechnologiesUSAInc.(http://www.zend.com)
*@licensehttp://framework.zend.com/license/3_0.txtBSDLicense
*@version$Id:$
*@linkhttp://framework.zend.com/package/PackageName
*@sinceFileavailablesinceRelease1.5.0
*/
C.4.7.3.类
每一个类必需最少包括这些phpDocumentor标签:
/**
*类的简述
*
*类的具体形貌(假如有的话)......
*
*@copyrightCopyright(c)2005-2010ZendTechnologiesUSAInc.(http://www.zend.com)
*@licensehttp://framework.zend.com/license/BSDLicense
*@versionRelease:@package_version@
*@linkhttp://framework.zend.com/package/PackageName
*@sinceClassavailablesinceRelease1.5.0
*@deprecatedClassdeprecatedinRelease2.0.0
*/
C.4.7.4.函数
每一个函数,包含工具办法,必需有起码包括以下内容的文档块(docblock):
函数的形貌
一切参数
一切大概的前往值
由于会见级已经由过程"public"、"private"或"protected"声明,不必要利用"@access"。
假如函数/办法抛出一个非常,利用@throws于一切已知的非常类:
@throwsexceptionclass[description]
毕业设计作品自己个人还是觉得比较满意的,尽管有些功能考虑的不全面,也没有很好的实现。
作者:
仓酷云
时间:
2015-1-19 06:13
基础有没有对学习php没有太大区别,关键是兴趣。
作者:
若相依
时间:
2015-2-5 01:47
实践是检验自己会不会的真理。
作者:
飘飘悠悠
时间:
2015-2-11 02:43
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox 支持的不是很好,所以能少用还是少用的好。
作者:
柔情似水
时间:
2015-3-1 19:54
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者:
蒙在股里
时间:
2015-3-10 23:24
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者:
分手快乐
时间:
2015-3-17 16:09
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者:
爱飞
时间:
2015-3-24 11:59
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2