(1)【强制】PHP 程序可以使用或来界定 PHP 代码,在 HTML 页面中嵌入纯变量时,可以使用这样的形式,不可使用其他的标签变种。
正例:
(2)【强制】纯 PHP 类文件,文件最后一个?>省略。
正例:
(1)【强制】PHP 代码必须只使用不带 BOM 的 UTF-8。
对于注释的要求:第一、能够准确反应设计思想和代码逻辑;第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作。
好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的 一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担。
所有多行注释都必须带有author和date两个属性。
1)单行注释:在语句结尾用双反斜杠“//”注释
2)多行注释:多行注视以“/*”或“/**”符号开头,以“*/”符号作为注释结束符。
需要生成文档的注释必须是以“/**”开头,以“*/”结尾。主流的 IDE 开发工具(如 Eclipse,PHPStorm等)会用不同的颜色来区分下面的几种注释。
(1)【推荐】生成文件时,在文件头部处,需要添加文件描述、创建者和创建时间的多行注释,以/**开头,以*/结尾。
正例:
(1)【强制】生成类时,在文件头部处,需要添加类描述、创建者(@author)、创建时间(@date)以及类属性(@property)的多行注释,以/**开头,以*/结尾。
正例:
(1)【强制】新建方法时,在方法申明头部处,需要添加方法描述、创建者(@author)、创建时间(@date)、参数(@param 类型、变量名、描述、可能的值)及返回结果(@return 类型、变量名、描述、可能的值)的多行注释,以/**开头,以*/结尾。
正例:
(1)【推荐】新建类属性时,在属性申明头部处,需要属性描述(@var 类型、变量名、描述、可能的值)的多行注释,以/**开头,以*/结尾。
正例:
(1)【强制】方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释,注意与代码对齐。
正例:
1、【推荐】待办事宜(TODO):( 标记人,标记时间,[预计处理时间])
表示需要实现,但目前还未实现的功能,但已经被广泛使用。只能应用于类,接口和方法。
正例:
2、【强制】错误,不能工作(FIXME):(标记人,标记时间,[预计处理时间])
在注释中用 FIXME 标记某代码是错误的,而且不能工作,需要及时纠正的情况。
正例:
3、【强制】谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。说明:代码被注释掉有两种可能性:1)后续会恢复此段代码逻辑。2)永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码)。
正例:
反例:
4、【强制】代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。
说明:代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义。
5、【强制】所有的枚举类型字段必须要有注释,说明每个数据项的用途。
正例:
反例:
Pascal命名法:所有单词第一个字母大写,其他字母小写。
Camel命名法(驼峰命名法) :除了第一个单词,所有单词第一个字母大写,其他字母小写。
1)【强制】采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名;
正例:validCateMedalList(有效分类勋章列表)
反例:yxflxz
2)【强制】杜绝完全不规范的缩写,避免望文不知义;此类随意缩写严重降低了代码的可阅读性;
正例:AbstractClass condition
反例:AbsClass condi
3)【强制】为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意,不要嫌名字长;
正例:haveLightNextLevelMedalProgressValueList(已点亮下级勋章进度列表)
反例:list
4)【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
正例:haveLightNextLevelMedalProgressValueList(已点亮下级勋章进度列表)
反例:dlxzjdList 中文
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。
1)【强制】类文件的名称和类名一致;
正例:HelloWorld.php(文件名)=> HelloWorld(类名)
反例:Hello.php(文件名)=> HelloWorld(类名)
2)【推荐】配置文件名小写,多个单词用-分割开;
正例:config.php config-prod.php
反例:Config.php configProd.php
3)【推荐】嵌套 php 的 view 文件使用小写,多个单词用-分隔开;
正例:add-app.php
反例:addApp.php
类命名采用 Pascal 命名方法,类名应该和文件名相匹配,如HelloWorld;
正例:HelloWorld
反例:helloWorld helloworld hello-world hello_world
1)【强制】通常方法一般为一个动作或行为动词,函数/方法的命名采用 Camel命名方法;
正例:runAction()
反例:RunAction() run-action() run_action()
2)【强制】尽量用有意义,描述性的词语来命名;
正例:checkForErrors() dumpDataToFile() getUserList()
反例:errorCheck() dataFile() user()
3)【强制】有时前缀名是有用的:
is - 含义为问一个关于某样事物的问题。无论何时,当人们看到 is 就会知道这是一个问题。
get - 含义为取得一个数值。
set - 含义为设定一个数值
update–含义为更新数据
insert/add/save–含义为插入数据
remove/delete–含义为删除数据
count – 含义为计算总数
list – 含义为获取多个对象列表
例如:isHitRetryLimit
正例:isHitRetryLimit() updateUserInfo() getUserInfo() insertUser() countStatusOnUser() listUser() getUserList()
反例:retryLimit() userInfo() userList() statusOn()
4)【推荐】内部成员函数命名应该是以 “_”开始;
正例:function _isUserTicket()
1)【强制】命名采用 Camel命名方法;
正例:userListuserList userListtestData
反例:user−listuser-list user−listuser_list $UserList
2)【强制】用有意义的,描述性的词语来命名变量;
正例:$haveLightNextLevelMedalProgressValueList(已点亮下级勋章进度列表)
反例:$list
3)【强制】别用缩写。用 name, address, salary 等代替nam, addr, sal,全局变量以”g_”开头;
正例:haveLightNextLevelMedalProgressValueList(已点亮下级勋章进度列表)haveLightNextLevelMedalProgressValueList(已点亮下级勋章进度列表) haveLightNextLevelMedalProgressValueList(已点亮下级勋章进度列表)g_user
反例:$dlxzmedlprosList 中文
4)【强制】别使用单个字母的变量象 i, n, x 等. 使用 index, temp 等 ,用于循环迭代的变量;
正例:for (index=0;index = 0; index=0;index < count;count; count;index++) {... }
反例:for (i=0;i = 0; i=0;i < count;count; count;i++) {... }
常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不允许出现小写字母,不要嫌名字长。
正例:MAX_STOCK_COUNT
反例:MAX_COUNT
1)【强制】所有的 PHP 文件必须使用 Unix LF(换行)作为行结束符。
2)【强制】所有 PHP 文件必须以一个空行结束。
3)【强制】纯 PHP 代码的文件关闭标签?>必须省略
1)【推荐】行长度不可有硬限制。
2)【推荐】软性的长度约束限制在120个字符以内,若超过此长度,带代码规范检查的编辑器要发出警告,不过一定不可发出错误提示。
4)【推荐】空行可以用来改善可读性和区分相关的代码块。
正例:
5)【强制】一行不应多于一个语句。
正例:
反例:
每个缩进的单位约定是4个空格的缩进,并且不可使用制表符作为缩进,需每个参与项目的开发人员在编辑器(Eclipse、EditPlus、Zend Studio、PhpStorm 等)中进行强制设定将 TAB 转化为 4 个空格,以防在编写代码时遗忘而造成格式上的不规范。
1)【强制】namespace声明之后必须存在一个空行。
2)【强制】所有的use声明必须位于namespace声明之后。
3)【强制】每条use声明必须只有一个use关键字。
4)【强制】use语句块之后必须存在一个空行
正例:(涉及1-4点)
反例:(涉及1-4点)
对于控制结构的样式规则概括如下:
1)【强制】控制结构关键词(if/elseif/else/switch/case/while/for/foreach/try/catch)之后必须有一个空格
2)【强制】左括号之后不可有空格
3)【强制】右括号之前不可有空格
4)【强制】在右括号和左花括号之间必须有一个空格
5)【强制】代码主体必须有一次缩进
6)【强制】右花括号必须主体的下一行
7)【强制】每个结构的主体必须被括在花括号里。这结构看上去更标准化,并且当加新行的时候可以减少引入错误的可能性。
正例:(涉及1-7点)
1.5.5.1 if,elseif,else
1)【强制】一个if结构看起来应该像下面这样。注意[括号],[空格],[花括号]的位置;并且 else 和 elseif和前一个主体的右花括号在同一行。
2)【强制】关键词 elseif 应该替代 else if 使用以保持所有的控制关键词像一个单词。
正例:
1.5.5.2 switch, case
1)【强制】一个 switch 结构看起来应该像下面这样。注意[括号],[空格]和[花括号]。case 语句必须从 switch 处缩进,并且 break 关键字(或其他中止关键字)必须和 case 主体缩进在同级。如果一个非空的 case 主体往下落空则必须有一个类似// no break 的注释。
正例:
1.5.5.3 while, do while
1)【强制】一个 while 语句看起来应该像下面这样。注意括号,[空格]和[花括号]的位置。
正例:
2)【强制】同样的,一个 do while 语句看起来应该像下面这样。注意[括号],[空格]和[花括号]的位置。
正例:
1.5.5.4 for
1)【强制】一个for 语句看起来应该像下面这样。注意[括号],[空格]和[花括号]的位置。
正例:
1.5.5.5 foreach
1)【强制】一个foreach 语句看起来应该像下面这样。注意[括号],[空格]和[花括号]的位置。
正例:
1.5.5.6 try, catch
1)【强制】一个try catch 语句看起来应该像下面这样。注意[括号],[空格]和[花括号]的位置。
正例:
1)【强制】每个运算符与两边参与运算的值或表达式中间要有一个空格;
正例:a=1;a = 1; a=1;c > d;d; d;a == b;b; b;a = b;b; b;c = a+a + a+b;
反例:b=1;b=1; b=1;c>d;d; d;a==b;b; b;a=b;b; b;c=a+a+a+b;
1)【推荐】在绝大多数可以使用单引号的场合,禁止使用双引号(性能考虑)。可以或必须使用单引号的情况包括但不限于下述:
u 字符串为固定值,不包含“\t”等特殊转义字符;
u 数组的固定下标,例如$array['key'];
u 表达式中不需要带入变量,例如string=′test′;,而非string = 'test';,而非string=′test′;,而非string = "test$var";
正例:array\['key'\]; a = 'test'; a="testtrn";a = "test\\t\\r\\n"; a="testtrn";b = "test$b";
反例:array\["key"\]; a = "test"; a=′testtrn′;a = 'test\\t\\r\\n '; a=′testtrn′;a = ' test$b ';
1)【强制】PHP keywords 必须使用小写。
正例:for public foreach static use extends
反例:FOR PUBLIC FOREACH STATIC USE EXTENDS
2)【强制】PHP 常量 true, false 和 null 必须使用小写。
正例:true false null
反例:TRUE FALSE NULL
和3.5.12类似,只是不需要申明可见性
1)【强制】类必须单独一个源文件,并且类名和文件名相同。
2)【强制】类的左花括号必须放到下一行,右花括号必须放在类主体的下一行。
3)【强制】类文件“?>”结束标记去掉
4)【强制】一个类的 extends 和 implements 关键词必须和类名在同一行。
5)【强制】implements 一个列表可以被拆分为多个有一次缩进的后续行。如果这么做,列表的第一项必须要放在下一行,并且每行必须只有一个接口。
正例:(涉及1-7点)
1)【强制】所有的属性必须声明可见性。
2)【强制】var 关键词不可用来声明属性。
3)【强制】一个语句不可声明多个属性。
4)【推荐】属性名称可以使用单个下划线作为前缀来表明保护或私有的可见性。
正例:(涉及1-4点)
反例:(涉及1-4点)
1)【强制】所有的方法必须声明可见性。
2)【强制】不超过200行代码,尽可能的拆分、复用。
3)【推荐】方法名不应只使用单个下划线来表明是保护或私有的可见性。
4)【强制】方法名在声明之后不可跟随一个空格。左花括号必须放在下面自成一行,并且右花括号必须放在方法主体的下面自成一行。左括号后面不可有空格,右括号前面不可有空格。
5)【强制】在参数列表中,逗号之前不可有空格,逗号之后必须要有一个空格。
6)【强制】方法中有默认值的参数必须放在参数列表的最后面。
7)【强制】参数列表可以被分为多个有一次缩进的多个后续行。如果这么做,列表的第一项必须放在下一行,并且每行必须只放一个参数。
8)【强制】当参数列表被分为多行,右括号和左花括号必须夹带一个空格放在一起自成一行。
9)【强制】如果存在,abstract 和 final 声明必须放在可见性声明前面。
10)【强制】如果存在,static 声明必须跟着可见性声明。
正例:(涉及1-10点)
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity
我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。
我在使用Ruby1.9.2p290更改文本文件的编码时遇到问题。我收到错误消息invalidbytesequenceinUTF-8(ArgumentError)。问题(我认为)在于字符集似乎是未知的。如果我执行以下操作,则从命令行:$filetest.txt我得到:Non-ISOextended-ASCIIEnglishtext,withCRLFlineterminators或者,或者,如果我这样做:$file-itest.txt我得到:test.txt:text/plain;charset=unknown但是,如果我这样做,在Ruby中:data=File.open("test.tx
我正在向我的Controller发送一个base64图像并按原样保存它。现在我需要显示该图像。这是我要显示的内容,但未显示图像:"/>为了编码,我使用了这个java脚本函数encodeURIComponent();我的编码图像格式:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/........ 最佳答案 你不需要解码base64应该可以 关于ruby-on-rails-在rails中显示base64编码的图像,我们在StackOve
我试图通过点击一个链接获得一个带有ISO-8859-1编码的页面,所以代码类似于这样:page_result=page.link_with(:text=>'link_text').click到目前为止,我得到的结果编码错误,所以我看到的字符如下:'T�tulo:'insteadof'Título:'我尝试了几种方法,包括:使用代理在第一个请求中声明编码:@page_search=@agent.get(:url=>'http://www.server.com',:headers=>{'Accept-Charset'=>'ISO-8859-1'})说明页面本身的编码page_result.
我正在寻找一种方便实用的方法来将编码值添加到Ruby中的URL查询字符串。目前,我有:require'open-uri'u=URI::HTTP.new("http",nil,"mydomain.example",nil,nil,"/tv",nil,"show="+URI::encode("Rosie&Jim"),nil)pu.to_s#=>"http://mydomain.example/tv?show=Rosie%20&%20Jim"这不是我要找的,因为我需要得到“http://mydomain.example/tv?show=Rosie%20%26%20Jim”,这样show=值就