设为首页 收藏本站
查看: 674|回复: 0

[经验分享] ZendFramework,php编码规范

[复制链接]

尚未签到

发表于 2017-3-25 10:05:42 | 显示全部楼层 |阅读模式
  版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/mayongzhan - 马永占,myz,mayongzhan

  本文内容总结自zend framework(zf)手册中文版(不完全汉化)
转载本文请注明
@author 马永占(MyZ)
@blog http://blog.csdn.net/mayongzhan/
@year 2008

记得以前写过一个php编码规范的文章,这里的格式是zf的规范,大部分可以应用于非zf项目的PHP。
说实话在程序正确的情况下,我有部分没有遵守。

PHP文件格式

1.?>
?>这个如果是结尾,在PHP中不是必须写的。不写的目的是为了防止出现?>之后出现空格造成文件有输出。有输出也许就会出现session already send之类的错误。尽量让?>后面没有输出,有了zf,代码和页面混合编码已经是上上上个世纪的事情了,所以你的程序要是有了?>后面出现别的,那看来还要继续啃手册了,啃啃view和controller做为预习。

2.缩进
4个空格,这个已经成为软件业标准了。

3.行最大长度
建议是每行最多是80个字符,最多不超过120个。出屏幕了还需要拉横向滚动条,所以尽量多加换行。习惯问题,有人就是宽屏,160个字都够。

4.换行符
zf手册建议是使用unix like的换行,不要使用mac和windows的换行
就是用\n ,不用\r或者\r\n
这个没发现有什么必要,能省一个符号?还是php主要跑在unix like上?恩

命名方式

1.类
zf的类名字这样的:
这个我解释不太清楚,如果能看手册的尽量看手册。
我只举几个例子做下简单的解释:
zf的类都写在Zend/目录下
Zend/Db/Table.php 这个文件里面的类就是 Zend_Db_Table
同样:Zend/Feed/Rss.php 这个文件里面的类就是Zend_Feed_Rss
注意类名和文件路径和文件名都是匹配的,还要注意是每个单词首字母要大写。
注意:自己写的类不要使用Zend_开头。

2.接口
这个和类基本相同
只是多了一点,就是必须以_Interface结尾,所以看到文件名为Interface的就是接口了。
例如:Zend_Controller_Dispatcher_Interface

3.文件名
除了以上类型外,其他的文件名可以使用以字母和下划线开头的字母数字下划线横线("-"),禁止使用空格。
所有的php代码文件必须是.php结尾。
例如:Zend/Controller/Front.php
例如:Zend/View/Helper/FormRadio.php

4.函数和方法
函数(function)只能用以字母开头的字母数字。
zf建议所有的function都放到class中。
函数名必须是小写字母开头,如果是多个单词组成,其余单词必须是大写字母。(camelCaps)
例如:getDate(),getElementById()
在面向对象中,成员变量的访问需要使用set/get,这个设计模式有提到。
例如:private $_myz; public function setMyz(){}; public function getMyz(){};

5.变量
变量只能用以字母开头的字母数字。
private和protected类型的变量必须以下划线开头,而且是单下划线。
public类型的变量不能以下划线开头。
变量名必须是小写字母开头,如果是多个单词组成,其余单词必须是大写字母。(camelCaps)

6.常量
常量要以大写字母开头,并且全部由大写字母和下划线组成。不带$符号。
例如:PHP_SELF
常量应该在类中定义:const MYZ_SELF

编码风格

1.<?php ?>
zf里面不建议使用短标签:<??>。我也不建议...
另外一点就是:结尾不写?>,理由上面解释过。

2.String
字符串如果是纯字符(不带变量),那么就用单引号。
$myz = 'MyZ is cowboy!';
在字符串中需要使用引号的,那么就用双引号,里面使用单引号,在SQL语句中用的很多。
$myz = "SELECT * FROM myFavorites WHERE name = 'frame' LIMIT 0,1";
字符串中含有变量,使用双引号。
$myz = "$name is cowboy!"; $myz = "{$name} is cowboy!";
这个是错的:$myz = "${name} is cowboy!";(虽然这个在PHP中是正确的)。
字符串相连
$zf = 'zend ' . 'framework';
如果需要换行就以下面的格式写:
$zf = 'zend'
. 'framework'
. 'is'
. 'good';

3.数组
数字索引,索引从0开始。
$myz = array(1,2,3,'myz','great',$a);
字符串索引,索引名称自行定义。
$myz = array ('zend' => '1.0.1',
'php' => '5.1.2',
'apache' => '2.2.4');

4.类
4.1.类的声明
类后面的{}每半个大扩号,需要单独占一行。
每个类需要有符合PHPDocumentor标准的注释。
类内所有的代码都要先缩进4个字符。
一个PHP文件内只能有一个类。
尽量一个PHP文件不要写其他的代码,如果有的话,请空两行。
例如:
require_once 'Zend/Pdf/Resource/Image/Jpeg.php';


/**
* Documentation Block Here
*/
class SampleClass
{
// entire content of class
// must be indented four spaces
}

4.2.类的成员变量
成员变量要先于函数,在类中定义。
不要使用var 这种方式定义变量,要使用private,protected,public,尽量不要把成员变量定义成public,而是使用set/get方式访问。

5.函数和方法
5.1.函数和方法的声明
类中的函数必须使用private,protected,public。
和类的格式相同,也需要大扩号单独占一行。
函数后面的()紧贴函数名。
/**
* Documentation Block Here
*/
class Foo
{
/**
* Documentation Block Here
*/
public function bar()
{
// entire content of function
// must be indented four spaces
}
}

函数后面的参数也可以使用引用变量public function bar(&$bar),这个必须先定义成&才能用。
return($this->bar);//这个是错误的。要写成:return $this->bar; 提高可读性。

5.2.函数和方法的使用
函数参数中如果有多个,就要用逗号隔开,并且逗号后面要有空格。
bar($a, $b, $c);

6.控制语句
6.1.If/Else/Elseif
If,Else,Elseif 每个都要占一行。
条件中,操作符前后要有空格,提高可读性。
开始的大括号和if同行,结束的大括号另起一行。
例如:
if ($a != 2) {
$a = 2;
} elseif ($a == 3) {
$a = 4;
} else {
$a = 7;
}
尽量多的使用elseif而不是再写一个if。
在某些时刻也可以不使用{}。例如只有一行。

6.2.Switch
和if相似,开始的大括号和switch同行,结束的大括号另起一行。
每一个case都要有4个空格缩进。
switch ($numPeople) {
case 1:
break;

case 2:
break;

default:
break;
}

每个case需要有个break,如果想要出于某种特殊目的不写break的,需要注明:// break intentionally omitted

7.注释
7.1.所有的注释都要符合phpdocumentor规范。http://phpdoc.org/
具体的规范,请参考zf文件中的内容。

7.2.文件注释
每个文件在开始都要有注释,符合phpdocumentor标准的。
/**
* Short description for file
*
* Long description for file (if any)...
*
* LICENSE: Some license information
*
* @copyright2005 Zend Technologies
* @license http://www.zend.com/license/3_0.txt PHP License 3.0
* @version CVS: $Id:$
* @link http://dev.zend.com/package/PackageName
* @since File available since Release 1.2.0
*/

7.3.类注释
/**
* Short description for class
*
* Long description for class (if any)...
*
* @copyright2005 Zend Technologies
* @license http://www.zend.com/license/3_0.txt PHP License 3.0
* @version Release: @package_version@
* @link http://dev.zend.com/package/PackageName
* @since Class available since Release 1.2.0
* @deprecated Class deprecated in Release 2.0.0
*/

7.4函数注释
函数注释需要注明:描述,全部的参数,返回值。
如果抛出异常,则需要:@throws exceptionclass [description]



规范全部完成,下一步该动手正题了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-355088-1-1.html 上篇帖子: ASP与PHP比较 下篇帖子: PHP If...Else 语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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