Zend Framework 规范.docx

上传人:b****5 文档编号:7236716 上传时间:2023-01-22 格式:DOCX 页数:68 大小:59.30KB
下载 相关 举报
Zend Framework 规范.docx_第1页
第1页 / 共68页
Zend Framework 规范.docx_第2页
第2页 / 共68页
Zend Framework 规范.docx_第3页
第3页 / 共68页
Zend Framework 规范.docx_第4页
第4页 / 共68页
Zend Framework 规范.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

Zend Framework 规范.docx

《Zend Framework 规范.docx》由会员分享,可在线阅读,更多相关《Zend Framework 规范.docx(68页珍藏版)》请在冰豆网上搜索。

Zend Framework 规范.docx

ZendFramework规范

ZendFramework的开发规范

一、ZendFramework中的Php编码标准

(一)-文件格式

1.对于只含有php代码的文件,我们将在文件结尾处忽略掉"?

>"。

这是为了防止多余的空格或者其它字符影响到代码。

 

实际上这个问题只有当你不开启压缩或缓存输出时才会出现:

 

//php.ini-禁止压缩输出及缓存输出

zlib.output_compression=off

output_buffering=off

 

//foo.php-注意这个时候有一些空格或换行符掉在了"?

>"之后,当然这在页面上是看不到的

 

php

$foo='foo';

?

>

 

 

 

 

 

 

 

//index.php-在包含foo.php的同时,实际上我们已经输出了一些空格或换行了

php

include'foo.php';

session_start();

?

>

 

 

这时我们将看到一个警告(warning)说"...Cannotsendsessioncachelimiter-headersalreadysent..."这是因为我们在session_start()之前输出了一些看不到的字符。

 

 

2.由__halt_compiler()允许的任意的二进制代码的内容,被ZendFramework中的PHP文件或由它们产生的文件所禁止。

 

实际上这个规定是为了防止一些极个别的情况发生,例如上例中:

 

//foo.php-我们已经禁用了"?

>"

 

php

//假如我们想通过__halt_compiler()输出某些东西

if(defined('__COMPILER_HALT_OFFSET__')){

  $fp=fopen(__FILE__,'r');

  fseek($fp,__COMPILER_HALT_OFFSET__);

  var_dump(stream_get_contents($fp));

}

 

//在程序结束时

__halt_compiler();

 

则在执行index.php时我们依然会看到警告,而只要把__halt_compiler()注释掉就不会报错了。

需要注意的是__halt_compiler()实际上时语言结构,而非函数或方法。

 

 

3.缩进由四个空格组成,禁止使用制表符TAB。

 

这个主要是为了代码美观整齐。

因为在不同的编辑器里,TAB制表符的长度是不一样的,而空格则是一样的。

实际上这已经成为编写代码的默认标准之一。

 

例如:

 

 

if($x==1){

  $indented_code=1;

  if($new_line==1){

      $more_indented_code=1;

  }

}

 

 

 

 

4.变量赋值必须保持相等间距和排列。

 

例如:

 

$variable1="demo";

$var2    ="demo2";

 

 

 

 

5.每行代码长度应控制在80个字符以内,最长不超过120个字符。

 

因为linux读入文件一般以80列为单位,就是说如果一行代码超过80个字符,那么系统将为此付出额外操作指令。

这个虽然看起来是小问题,但是对于追求完美的程序员来说也是值得注意并遵守的规范。

 

例如,下面是在Zend/Navigation.php中的一段代码:

 

 

6.每行结尾不允许有多余的空格。

 

这在很多IDE或者编辑器里都是可以设置的,例如在save保存操作执行时,顺便去掉多余的空格。

 

 

7.行结束标志遵循Unix文本文件的约定,行必需以单个换行符"\n"(LF)结束。

换行符在文件中表示为10,或16进制的0x0A。

不要使用苹果操作系统的回车"\r"(0x0D)或Windows系统的回车换行组合如"\r\n"(0x0D,0x0A)。

 

这个规定没有贬低苹果机或者Windows的意思,而事实确实是,LAMP还是主流,所以遵循其文件约定也是为了在liunx系统上表现更好的性能。

 

 

二、

ZendFramework中的Php编码标准

(二)-命名约定

1.类命名总是对应于其所属文件的目录结构。

 

这源于PEAR命名约定,能让人从类名就能联想到该类的存放位置。

 

例如:

Zend_Acl_Role就代表Zend/Acl/Role.php文件。

  

 

 

require_once'Zend/Acl/Role/Interface.php';

classZend_Acl_RoleimplementsZend_Acl_Role_Interface

{

  ......

}

 

 

这是规定实际上提供了一种伪命名空间机制,这在php5.3和php6里面都将得到支持,到时候ZendFramework可能会有一翻变革。

 

 

2.类名只允许有字母和数字字符,在大部分情况下不鼓励使用数字。

下划线只允许做路径分隔符。

 

这也源自PEAR命名约定,只不过ZendFramework在其基础上制定了更严格的规定。

 

例如:

Zend_Db_Table是允许的。

Zend_Db_Table2则是不鼓励的。

Zend-Db-Table是不允许的。

 

 

3.当你为其他开发人员提供API接口的时候,如果他们需要用一个复合的名称来确认这个接口,那么你必须把这个名称用下滑线(underline)隔开,而不是使用驼峰的形式。

而且最好是以常量(contant)的形式。

 

这个规定可能有点难懂,让我们举个例子吧。

例如在实例化Zend_Db_Adapter_xxx实例时,我们通常需要将adapter的名称作为参数传入到Zend_Db:

:

factory()并由该工厂返回所需实例。

 

我们可以实例化MySQLPDO驱动:

 

$db=Zend_Db:

:

factory('PDO_MYSQL',$config);

 

 

也可以实例化MsSQLPDO驱动:

 

$db=Zend_Db:

:

factory('PDO_MSSQL',$config);

 

 

 

4.如果类名包含多个单词,每个单词的第一个字母必须大写,连续的大写是不允许的。

 

例如:

Zend_PDF是不允许的。

Zend_Pdf才是标准写法。

 

 

5.有Zend及其合作伙伴开发的ZendFramework类的命名必须总是以"Zend_"作为开头,并放在"Zend/"目录下。

 

例如:

Zend_Db是由Zend开发的,它通常以“Zend/Db.php”的形式存放。

My_Db则是用户自己定义或继承自Zend_Db的类,所以它不得以"Zend_"作为开头,而且通常以"My/Db.php"的形式存放。

 

 

6.接口类(interface)的定义必须遵循类名的定义规范,不同的是必须要以_Interface作为结尾。

 

例如:

Zend_Controller_Dispatcher_Interface对应的是Zend/Controller/Dispatcher/Interface.php

 

 

7.对于文件名,只有字母、数字字符、下划线和短横线("-")可用,空格是绝对不允许的。

 

例如:

Zend/Controller/Front.php是标准写法。

My/Controller/Common-Action_2.php也是允许的。

My/Controller/CommonAction.php则是禁止的。

 

 

8.包含任何PHP代码的任何文件应当以".php"扩展名结尾,视图脚本默认拓展名是".phtml",也可以用".html"等代替。

 

例如:

Zend/Controller/Front.php是标准php文件写法,index.phtml是默认视图脚本名。

 

我相信很多人都见过以下的一些php的拓展名:

.php4

.php5

.phpx

.class.php

.include.php

html(开玩笑?

 

而在ZendFramework中你只会见到一种,那就是".php"。

 

 

9.函数名只允许由数字或字母组成,下划线是不允许的,首字母要小写,其后每个单词首字母要大写,即所谓的“camelCaps”规则。

 

例如:

 

filterInput()

getElementById()

widgetFactory()

 

 

等都是规范的写法。

 

而:

 

FilterInput3()

getelementbyid()

widget_factory()

 

 

等都是不允许的。

 

 

10.函数名越详细越好,应该能够描述清楚该函数的功能。

 

例如:

 

getOne($id)//描述的不清不楚。

getOneRecordById($id)//则非常详细而清晰。

 

 

 

11.对于对象成员的访问,我们必须始终使用“get”和“set”方法。

 

例如:

 

classFoo

{

  protected$_testObj;

 

  publicfunctiongetTestObj()

  {

      return$this->_testObj;

  }

 

  publicfunctionsetTestObj($testObj)

  {

      $this->_testObj=$testObj;

  }

}

 

 

 

12.当我们使用了某些设计模式的时候,我们的方法中应该含有该模式名。

 

例如:

 

abstractclassZend_Cache

{

  //......

 

  publicstaticfunctionfactory($frontend,$backend,

      $frontendOptions=array(),$backendOptions=array(),

      $customFrontendNaming=false,$customBackendNaming=false,

      $autoload=false)

  {

      //......

  }

}

 

 

 

13.当类成员函数被声明为private或者protected时,函数必须以下划线"_"为开头,一般情况下的函数不含下划线。

 

例如:

 

classZend_Foo

{

  protectedfunction_fooBar()

  {

      //...

  }

}

 

 

 

14.如果我们需要把一些经常使用的函数或方法定义为全局函数,那么应该把它们以静态(static)的形式定义在类中。

 

例如:

 

classZend_Debug

{

  //......

 

  publicstaticfunctiondump($var,$label=null,$echo=true)

  {

      //......

  }

}

 

 

 

15.在类中被声明为static的函数或变量不应该再被声明为private私有,而应该为protected或者public,如果只是不想被子类继承,则应该用final声明它们。

 

例如:

 

classFoo

{

  finalpublicstaticfunctionfooFinally()

  {

  }

}

 

classBarextendsFoo

{

}

 

//Thisiswrong

Bar:

:

fooFinally();

 

//UseFoo:

:

fooFinally()instead

Foo:

:

fooFinally();

 

 

 

16.函数或方法的初始中括号应该在函数声明的下一行顶格。

 

例如:

 

functionMyfunction($parameter1)

{

}

 

 

 

17.当函数参数不一定需要被赋值的时候,用"null"来代替"false"作为函数参数的默认值,除非该参数是boolean值。

 

例如,考虑如下代码:

 

publicfunctionfoo($required,$optional=null)

{

  if(isset($optional)){

      echo'Echosomethingonlywhen$optionalissetand!

=null';

  }

}

 

publicfunctionfoo($required,$optional=false)

{

  if(isset($optional)){

      echo'Alwaysechosomething';

  }

}

 

 

 

18.变量只允许由字母组成,数字或下划线都是不允许的。

 

例如:

 

$foo//是正确的

$foo_foo//是错误的

$foo2//也是错误的

 

 

 

19.被声明为private或者protected的类成员属性必须由下划线"_"作为开头,这也是唯一一种允许变量中出现下划线的情况,而声明为public的成员属性则在任何时候都不允许含有下划线。

 

例如:

 

classZend_Foo

{

  private$_barPrivate;

  protected$_barProtected;

  public$barPublic;

}

 

 

 

20.变量名必须像函数名那样,即首字母要小写,其后每个单词首字母要大写,即所谓的“camelCaps”规则。

 

例如:

 

$compatibilityMode

$registryClassName

 

 

 

21.建议用描述性的变量的命名,变量名越详细越好,以至于像$i或$n等等都是不鼓励使用的,特别是在超过20行的循环里面。

 

例如Zend_Search_Lucene中的一段代码:

 

//readsegmentInfos

for($count=0;$count<$segments;$count++){

  $segName=$segmentsFile->readString();

  ......

}

 

 

 

22.常量constant必须仅包括字母,数字和下划线,而且必须全部大写,各个单词之间用下划线分割。

 

例如:

"MY_CONSTANT_ONE"//是允许的

"MYCONSTANTTWO"//是不允许的

"my_constant_two"//也是不允许的

 

 

 

23.常量应该在类中由const声明并定义,全局范围内的define是不鼓励使用的。

 

例如:

 

classZend_Acl

{

  constTYPE_ALLOW='TYPE_ALLOW';

  constTYPE_DENY  ='TYPE_DENY';

  ......

}

 

 

 

24.和php文档说明不一样的是,ZendFramework中的boolean值和null值都是用小写的。

 

例如Zend_Mail中的一段代码:

 

publicfunctionsetMessageId($id=true)

{

  if($id===null||$id===false){

      return$this;

  }elseif($id===true){

      $id=$this->createMessageId();

  }

  ......

}

 

 

三、

ZendFramework中的Php编码标准(三)-编码风格

 

1.PHP代码必须以完整的形式来定界,短定界符只能用在视图。

 

例如:

 

php

//Phpcodehere

?

>

  

//index.phtml

='hello'?

>

 

 

 

2.当一个字符串是纯文字组成的时候(即不含有变量),则必须总是以单引号(')或者撇号(`)作为定界符。

 

例如:

 

$a='ExampleString';

$b=`ExcuteSomething`;

 

 

 

3.当一个字符串含有撇号(`)的时候,我们允许使用双引号(")来定界字符串,特别是在些SQL语句的时候。

 

例如:

 

$sql="SELECT`id`,`name`from`people`WHERE`name`='Fred'OR`name`='Susan'";

 

 

 

4.变量替换中的变量只允许用$+变量名的形式。

 

例如:

 

$greeting="Hello$name,welcomeback!

";  //允许

$greeting="Hello{$name},welcomeback!

";//允许

$greeting="Hello${name},welcomeback!

";//不允许

 

 

 

5.多个字符串必须用点号"."来连接,且字符串与点号间必须用一个空格隔开。

 

例如:

 

$company='Zend'.'Technologies';

 

 

 

6.当用点号"."连接各字符串的时候,我们允许把它分割成多行以增强可读性。

在这种情况下,点号"."必须与等于号"="对齐。

 

例如:

 

$sql="SELECT`id`,`name`FROM`people`"

    ."WHERE`name`='Susan'"

    ."ORDERBY`name`ASC";

 

 

 

7.任何负数都不允许作为数组的索引,数组索引必须以任何非负数作为开头,而且强烈建议以0作为默认开头。

 

例如:

 

$sampleArray=array(-1=>-1,0=>0);//错误

$sampleArray=array(0=>-1,1=>0);  //正确

$sampleArray=array(1=>-1,2=>0);  //正确

 

 

 

8.当用array类型符号来构造数组的时候,必须在每个逗号之后加上一个空格来增强可读性。

 

例如:

 

$sampleArray=array(1,2,3,'Zend','Studio');

 

 

 

9.多行的索引数组同样允许用array类型符号来构造,只是我们需要为每行的每个值加上必要的空格来保持其整齐美观。

 

例如:

 

$sampleArray=array(1,      2,  3,  'Zend',

              'Studio',$a,$b,$c,

              56.44,  $d,500);

 

 

 

10.当使用array类型符声明关联数组的时候,我们鼓励把它分成多个行,只是我们必须同时保证每行的键与值的对齐,以保持美观。

 

例如:

 

$sampleArray=array('firstKey'  =>'firstValue',

              'secondKey'=>'secondValue');

 

 

 

11.中括号的开始必须在类名的下一行顶格。

 

例如:

 

classfoo

{

  //正确{}写法

}

classfoo{

  //错误{}写法

}

 

 

 

12.类定义必须拥有符合phpDocumentor标准的注释块。

 

例如:

 

/**

*类定义注释

*/

classZend_Class

{

}

 

 

 

13.类中的所有代码都必须用4个空格来进行缩进。

 

例如:

 

classZend_Class

{

  $spaces='4spaces';

  if($spaces=='4spaces'){

      echo'ispermitted!

';

  }

}

classZend_Class

{

  $spaces='lessthen4spaces';

  if($spaces!

='4spaces'){

  echo'isnotpermitted!

';

  }

}

 

 

 

14.每个php文件只允许声明一个类。

在类文件里面写其它代码是允许的,但并不鼓励这样做。

假如真要附加代码的话,必须用空行来分隔。

 

例如:

 

php

//允许但并不鼓励这样做

classZend_Class

{

  static$foo='foo';

}

echoZend_Class:

:

$foo;

 

php

/**

*在同一文件里声明超过两个类是不允许的

*/

classClass_One

{

}

classClass_Two

{

}

?

>

 

 

 

15.任何类变量的声明都必须放在类顶部,先于任何函数的声明。

 

例如:

 

//正确

classright

{

  public$foo='先于函数定义';

  publicfunctionfun()

  {

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1