ZendFramework,php编码规范

记得以前写过一个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

*

* @copyright 2005 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)...

*

* @copyright 2005 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]

你可能感兴趣的:(ZendFramework,php编码规范)