仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 649|回复: 7
打印 上一主题 下一主题

[学习教程] PHP编程:PHP的PSR标准中文版

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我想在讲述自己的学习方式前,对那些期望能从我的文章中获得有用信息的人说一句心里话:FIG构造在制订跟PHP相干标准,简称PSR。今朝已有4个代码标准,近期抽暇翻译成了中文版。倡议做PHP的同砚都存眷一下。
文档堆栈地点:https://github.com/hfcorriez/fig-standards
一切已承受的标准参考:https://github.com/hfcorriez/fig-standards/tree/zh_CN/%E6%8E%A5%E5%8F%97
代码款式标准

本指南的企图是为了削减分歧开辟者在扫瞄代码时削减认知的差别。为此枚举一组怎样格局化PHP代码的共用划定规矩。
各个成员项目标个性构成了本文的款式划定规矩。当分歧的开辟者在分歧的项目中互助时,将会在这些分歧的项目中利用一个配合的尺度。因而,本指南的优点不在于划定规矩自己,而在于共用这些划定规矩。
在RFC2119中的特征关头词"必需"(MUST),“不成”(MUSTNOT),“需要”(REQUIRED),“将会”(SHALL),“不会”(SHALLNOT),“应该”(SHOULD),“不该”(SHOULDNOT),“保举”(RECOMMENDED),“能够”(MAY)和“可选”(OPTIONAL)在这文档中将被用来形貌。
1.纲目



  • 代码必需恪守PSR-1。

  • 代码必需利用4个空格的缩进,而不是制表符。

  • 一行代码长度不该硬性限定;软限定必需为120个字符;也应该是80个字符大概更少。

  • 在namespace声明上面必需有一个空行,而且use声明朝码块上面也必需有一个空行。

  • 类的左花括号必需放到下一行,右花括号必需放在类主体的下一行。

  • 办法的左花括号必需放鄙人一行,右花括号必需放在办法主体上面。

  • 一切的属性和办法必需有可见性(译者注:Public,Protect,Private)声明;abstract和final声明必需在可见性之前;static声明必需在可见性以后。

  • 把持布局的关头词必需在前面有一个空格;办法和函数不成有。

  • 把持布局的左花括号必需放在统一行,右花括号必需放在把持主体的下一行。

  • 把持布局的左括号前面不成有空格,右括号之前不成有空格。

1.1.示例

本示例包括下面的一些划定规矩复杂展现:
  1. <?phpnamespaceVendorPackage;useFooInterface;useBarClassasBar;useOtherVendorOtherPackageBazClass;classFooextendsBarimplementsFooInterface{publicfunctionsampleFunction($a,$b=null){if($a===$b){bar();}elseif($a>$b){$foo->bar($arg1);}else{BazClass::bar($arg2,$arg3);}}finalpublicstaticfunctionbar(){//methodbody}}
复制代码
2.归纳综合

2.1基本代码标准

代码必需恪守PSR-1的一切划定规矩。
2.2文件

一切的PHP文件必需利用UnixLF(换行)作为行停止符。
一切PHP文件必需以一个空行停止。
纯PHP代码的文件封闭标签?>必需省略
2.3.行

行长度不成有硬限定。
行长度的软限定必需是120个字符;关于软限定,主动款式反省器必需告诫但不成报错。
行实践长度不该凌驾80个字符;较长的行应该被拆分红多个不凌驾80个字符的后续行。
在非空行前面不成有空格。
空行能够用来改良可读性和辨别相干的代码块。
一行不该多于一个语句。
2.4.缩进

代码必需利用4个空格的缩进,而且不成利用制表符作为缩进。
注重:只用空格,反面制表符夹杂利用,将会对制止代码差别,补钉,汗青和注解中的一些成绩有匡助。利用空格还可使调剂渺小的缩出去改善行间对齐变得十分复杂。
2.5.关头词和True/False/Null

PHPkeywords必需利用小写。
PHP常量true,false和null必需利用小写。
3.Namespace和Use声明

假如存在,namespace声明以后必需有一个空行。
假如存在,一切的use声明必需放在namespace声明的上面。
一个use关头字必需只用于一个声明。
在use声明朝码块前面必需有一个空行。
示例:
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...
复制代码
4.类,属性和办法

术语“类”指一切的类,接口和特征(traits)。
4.1.扩大和承继

一个类的extends和implements关头词必需和类名在统一行。
类的左花括号必需放鄙人面自成一行;右花括号必需放在类主体的前面自成一行。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;classClassNameextendsParentClassimplementsArrayAccess,Countable{//constants,properties,methods}
复制代码
implements一个列表能够被拆分为多个有一次缩进的后续行。假如这么做,列表的第一项必需要放鄙人一行,而且每行必需只要一个接口。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;classClassNameextendsParentClassimplementsArrayAccess,Countable,Serializable{//constants,properties,methods}
复制代码
4.2.属性

一切的属性必需声明可见性。
var关头词不成用来声明属性。
一个语句不成声明多个属性。
属性称号不该利用单个下划线作为前缀来标明回护或公有的可见性。
一个属性声明看起来应当上面如许的。
  1. <?phpnamespaceVendorPackage;classClassName{public$foo=null;}
复制代码
4.3.办法

一切的办法必需声明可见性。
办法名不该只利用单个下划线来标明是回护或公有的可见性。
办法名在声明以后不成跟从一个空格。左花括号必需放鄙人面自成一行,而且右花括号必需放在办法主体的上面自成一行。左括号前面不成有空格,右括号后面不成有空格。
一个办法界说看来应当像上面如许。注重括号,逗号,空格和花括号:
  1. <?phpnamespaceVendorPackage;classClassName{publicfunctionfooBarBaz($arg1,&$arg2,$arg3=[]){//methodbody}}
复制代码
4.4.办法参数

在参数列表中,逗号之前不成有空格,逗号以后必需要有一个空格。
办法中有默许值的参数必需放在参数列表的最初面。
  1. <?phpnamespaceVendorPackage;classClassName{publicfunctionfoo($arg1,&$arg2,$arg3=[]){//methodbody}}
复制代码
参数列表能够被分为多个有一次缩进的多个后续行。假如这么做,列表的第一项必需放鄙人一行,而且每行必需只放一个参数。
当参数列表被分为多行,右括号和左花括号必需夹带一个空格放在一同自成一行。
  1. <?phpnamespaceVendorPackage;classClassName{publicfunctionaVeryLongMethodName(ClassTypeHint$arg1,&$arg2,array$arg3=[]){//methodbody}}
复制代码
4.5.abstract,final和static

假如存在,abstract和final声明必需放在可见性声明后面。
假如存在,static声明必需随着可见性声明。
  1. <?phpnamespaceVendorPackage;abstractclassClassName{protectedstatic$foo;abstractprotectedfunctionzim();finalpublicstaticfunctionbar(){//methodbody}}
复制代码
4.6.挪用办法和函数

要挪用一个办法或函数,在办法大概函数名和左括号之间不成有空格,左括号以后不成有空格,右括号之前不成有空格。函数列表中,逗号之前不成有空格,逗号以后必需有一个空格。
  1. <?phpbar();$foo->bar($arg1);Foo::bar($arg2,$arg3);
复制代码
参数列表能够被拆分红多个有一个缩进的后续行。假如这么做,列表中的第一项必需放鄙人一行,而且每行必需只要一个参数。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...0
复制代码
5.把持布局

关于把持布局的款式划定规矩归纳综合以下:


  • 把持布局关头词以后必需有一个空格
  • 左括号以后不成有空格
  • 右括号之前不成有空格
  • 在右括号和左花括号之间必需有一个空格
  • 代码主体必需有一次缩进
  • 右花括号必需主体的下一行
每一个布局的主体必需被括在花括号里。这布局看上往更尺度化,而且当加新行的时分能够削减引进毛病的大概性。
5.1.if,elseif,else

一个if布局看起来应当像上面如许。注重括号,空格,花括号的地位;而且else和elseif和前一个主体的右花括号在统一行。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...1
复制代码
关头词elseif应当替换elseif利用以坚持一切的把持关头词像一个单词。
5.2.switch,case

一个switch布局看起来应当像上面如许。注重括号,空格和花括号。case语句必需从switch处缩进,而且break关头字(或其他中断关头字)必需和case主体缩进在同级。假如一个非空的case主体往下跌空则必需有一个相似//nobreak的正文。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...2
复制代码
5.3.while,dowhile

一个while语句看起来应当像上面如许。注重括号,空格和花括号的地位。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...3
复制代码
一样的,一个dowhile语句看起来应当像上面如许。注重括号,空格和花括号的地位。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...4
复制代码
5.4.for

一个for语句看起来应当像上面如许。注重括号,空格和花括号的地位。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...5
复制代码
5.5.foreach

一个foreach语句看起来应当像上面如许。注重括号,空格和花括号的地位。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...6
复制代码
5.6.try,catch

一个trycatch语句看起来应当像上面如许。注重括号,空格和花括号的地位。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...7
复制代码
6.闭包

闭包在声明时function关头词以后必需有一个空格,而且use之前也必要一个空格。
左花括号必需在统一行,右花括号必需在主体的下一行。
参数列表和变量列表的左括号以后不成有空格,其右括号之前也不成有空格。
在参数列表和变量列表中,逗号之前不成有空格,逗号以后必需有空格。
闭包带默许值的参数必需放在参数列表前面。
一个闭包声明看起来应当像上面如许。注重括号,空格和花括号的地位。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...8
复制代码
参数和变量列表能够被分红多个带一次缩进的后续行。假如这么做,列表的第一项必需放鄙人一行,而且一行必需只放一个参数或变量。
当终极列表(不论是参数仍是变量)被分红多行,右括号和左花括号必需夹带一个空格放在一同自成一行。
上面是一个参数和变量列表被支解成多行的示例。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;//...additionalPHPcode...9
复制代码
注重假如在函数大概办法中把闭包作为一个参数挪用,如上格局划定规矩一样合用。
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;classClassNameextendsParentClassimplementsArrayAccess,Countable{//constants,properties,methods}0
复制代码
7.结论

在该指南中有良多作风的元素和做法成心被疏忽失落。这些包含但不范围于:


  • 全局变量和全局常量的声明

  • 办法声明

  • 操纵符和赋值

  • 行间对齐

  • 正文和文档块

  • 类名给你前缀和后缀

  • 最好理论

今后的倡议能够修正和扩大该指南以满意这些或其他作风的元素和理论。
附录A查询拜访

为了写这个作风指南,我们接纳了查询拜访个项目以断定配合的做法。这个查询拜访在这里供别人检察。
A.1.查询拜访数据
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;classClassNameextendsParentClassimplementsArrayAccess,Countable{//constants,properties,methods}1
复制代码
A.2.查询拜访申明

indent_type:缩进范例。tab="利用制表符",2or4="空格数目"
line_length_limit_soft:行长度的“软”限定,用字符。?=不暗示大概数字no意为不限定.
line_length_limit_hard:行长度的"硬"限定,用字符。?=不暗示大概数字,no意为不限定.
class_names:类名怎样定名lower=只是小写,lower_under=小写加下划线,studly=骆驼型.
class_brace_line:类的左花括号是放在同(same)一行仍是鄙人(next)一行?
constant_names:类常量怎样定名?upper=年夜写加下划线分开符。
true_false_null:全校写大概全年夜写?
method_names:办法名怎样定名?camel=驼峰式,lower_under=小写加下划线分开符。
method_brace_line:办法的左花括号在同(same)一行仍是鄙人(next)一行?
control_brace_line:把持布局的左花括号在同(same)一行仍是鄙人(next)一行?
control_space_after:把持布局关头词后是不是有空格?
always_use_control_braces:把持布局老是利用花括号?
else_elseif_line:当利用else和elseif,是不是放在同(same)一行仍是鄙人(next)一行?
case_break_indent_from_switch:case和break分离从swith语句处缩进几次?
function_space_after:函数挪用的函数名和左括号是不是有空格?
closing_php_tag_required:如过是纯PHP文件,封闭标签?>是不是必要?
line_endings:利用何种的行停止符?
static_or_visibility_first:在界说办法的时分static和可见性谁在后面?
control_space_parens:在把持布局表达式中,左括号前面和右括号后面是不是要有一个空格?yes=if($expr),no=if($expr).
blank_line_after_php:PHP的入手下手标签前面是不是必要一个空行?
class_method_control_brace:左花括号在类,办法和把持布局中的地位。
A.3.查询拜访了局
  1. <?phpnamespaceVendorPackage;useFooClass;useBarClassasBar;useOtherVendorOtherPackageBazClass;classClassNameextendsParentClassimplementsArrayAccess,Countable{//constants,properties,methods}2
复制代码
参加PHP开发学习,或许只是一次偶然的想法吧!只是想在走向社会之前体验、学习在一个公司或者说是项目团队之中如何去更有效的沟通、交流、共同合作,还有就是为毕业实习找工作增加伐码。
admin 该用户已被删除
沙发
发表于 2015-1-19 05:57:53 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
再现理想 该用户已被删除
板凳
发表于 2015-1-24 15:36:14 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
谁可相欹 该用户已被删除
地板
发表于 2015-2-1 21:40:20 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
分手快乐 该用户已被删除
5#
发表于 2015-2-7 16:21:28 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
蒙在股里 该用户已被删除
6#
发表于 2015-2-22 16:13:57 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
变相怪杰 该用户已被删除
7#
发表于 2015-3-14 05:01:00 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
小妖女 该用户已被删除
8#
发表于 2015-3-21 00:23:40 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 16:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表