Coding Standards
使用2个空格,不是tabs。
行的结束不应该有空格。
所有的文本文件的在行的结尾以换行符\n结尾。
PHP文件开头的所有块应该使用空行分割。这包括/**@file*/块,命名空间声明和use语句以及文件中的后续代码。
So,for example,a file header might look as follows:
<?php
namespaceThis\Is\The\Namespace;
useDrupal\foo\bar;
/**
*Providesexample.
*/
classExampleClassName{}
.module文件
<?php
/**
*@file
*Providesexamplefunctionality
*/
useDrupal\foo\Bar;
/**
*Implementshook_help().
*/
functionexample_help($route_name){Operators 运算符
为了便于阅读,所有的二元运算符(两个值之间的运算)例如 + ,-,=,!=,==,>等应该在运算符前后有个空格。
$foo=$bar;
//not
$foo=$bar;
一元运算符(仅操作一个值得运算符)(例如++,--)在运算符与其操作的变量或数字之间不应有空格。
检查弱类型不等式必须使用!=运算符,<> 不能使用与PHP中。
Control Structures 控制结构控制结构包括:if, for, while, switch等。
Here is a sample if statement,since it is the most complicated of them:
if(condition1||condition2){
action1;
}
elseif(condition3&&condition4){
action2;
}
else{
defaultaction;
}
Note:Don't use "else if" -- awalys use elseif.
控制语句应该在控制关键字和左括号之间有个空格,以便将它们与函数调用区分开来。即使在技术上可选的情况下也要使用花括号。
For switch statements:
switch(condition){
case1:
action;
break;
case2:
action;
break;
default:
defaultaction;
}
For d-while statements:
do{
actions;
}while($condition);模板控制语句 .tpl.php
<?phpif(!empty($item)):?>
<p><?phpprint$item;?></p>
<?phpendif;?>
<?phpforeach($itemsas$item):?>
<p><?phpprint$item;?></p>
<?phpendforeach;?>Line length and wrapping
以下规则适用于代码。 有关注释的规则,请参阅Doxygen和注释格式约定
通常,所有代码不应超过80个字符。
包含更长函数名,函数和类定义,变量声明的可以超过80个字符。
控制条件超过80个字符可以这样写:
if($something['with']['something']['else']['in']['here']==
mymodule_check_something($whatever['else'])){
//...
}
if(isset($something['what']['ever'])&&$something['what']['ever']>
$infinite&&user_access('galaxy')){
//...
}
if(preg_match('@(/|\\)(\.\.|~)@',$target)&&strpos($target_dir,
$repository)!==0){
returnFALSE;
}
不应该将条件包装成多行。
控制结构条件也不应该试图赢得“最少线条代码奖”中的最紧凑条件:
//DON'TDOTHIS!
if((isset($key)&& !empty($user->uid)&&$key==$user->uid)||
(isset($user->cache)?$user->cache:'')==ip_address()||isset($value)
&&$value>=$time())){
//...
}
//Keyisonlyvalidifitmatchesthecurrentusr'sID,asotherwise
other
//userscouldaccessanyuser'sthings.
$is_valid_user=(isset($key)&&!empty($user->uid)&&$key==$use->uid);
$is_valid_cache=(isset($user->cache)?$user->cache==ip_address():
FALSE);
$is_valid_query=$is_valid_cache||(isset($value)&&$value>=time());
if($is_valid_user||$is_valid_query){
//...
}Function Calls 函数调用
函数应该在函数名称,左括号和第一个参数之间没有空格,逗号和每个参数之间有空格,最后一个参数,右括号和分号之间没有空格。
$var=foo($bar,$baz,$quux);
Function Delarations 函数声明
带有默认值的参数出现在参数列表的末尾。如果合适,要返回有意义的值。
匿名函数应该在函数和它的参数之间有个空格,如下所示例:
array_map(function($item)use(id){
return$item[$id];
},$itmes)Calss Constructor Calls
当调用的函数没有类构造函数时,也要包含括号:
$foo=newMyClassName();
//这也是为了与有参数的构造函数保持一致
$foo2=newMyClassName($arg1,$arg2);
请注意,如果类名是一个变量,那么首先计算变量以获取类名,然后再调用:
$bar='MyClassName';
$foo=new$bar();
$foo2=new$bar($arg1,$arg2);Arrays
数组应该使用短阵列语法进行格式化,每个元素之间使用一个空格(逗号之后),关联数组使用=>运算符,前后使用空格:
$some_array=['hello','world','foo'=>'bar'];
注意,如果声明数组的行超过80个字符,则应该每个元素分成自己的行,并缩进一级:
$form['title']=[
'#type'=>'textfield',
'#title'=>t('title'),
'#size'=>60
'#maxlength'=>128,
'#description'=>t('Thetitleofyournode.'),
]
注意,最后一个元素末尾的逗号,如果其他元素稍后放置末尾,有助于防止错误解析。
请注意,PHP5.4之前的版本不支持短矩阵语法。这意味着Drupal7和Drupal7核心的语法的项目没有明确要求使用。
Quotes 引号Drupal没有强制使用单引号与双引号的硬性标准。在可能的情况下,保持代码的一致性,尊重其他开发人员的风格。
默认情况下使用单引号,除下面情况:
1.刻意的在线变量插值,"<h3>$header</h3>";
2.包含单引号的字符串,如翻译等,"He's a good person.";
String Concatenations始终在圆点(.)和连接部分使用空格提高可读性。
<?php
$string='Foo'.$bar;
$string=bar().'foo';
$string='Foo'.'bar';
在连接简单变量时,可以使用双引号并在其添加变量;否则,使用单引号。
<?php
$string="Foo$bar";
在使用连接赋值运算符(.=)时,与赋值运算符一样,在每一边使用空格。
<?php
$string.='Foo';
$string.=$bar;
$string.=baz();Including Code
在无条件的包含一个类文件的地方,使用require_once().在有条件的包含类文件的任何地方(工厂方法),请使用include_once().两个都确保只包含一次类文件。它们共享文件列表。
注意:include_once()和require_once是语句,而不是函数。您不需要使用括号包含文件名。
当包含同一目录或子目录的代码时,用 . 开始文件路径。
include_once ./includes/mymodule/mymodule_formatting.inc
在drupal7或更高的版本中使用DRUPAL_ROOT:
require_once DRUPAL_ROOT . '/' .varable_get('cache_inc','includes/cache.inc');
To include code in a module:
module_load_include('inc','node','node.admin');PHP Code Tags
总是使用<?php ?>来分割PHP代码,而不是简写<? ?>.
从drupal4.7开始,代码文件末尾的?>被省略。这包括模块和包文件。
1.删除它可以消除文件末尾不必要的空白,可能导致“文件头已发送”错误,XHML/XML验证问题和其他问题。
2.文件末尾的结束分割符是可选的
3.PHP.net本省从文件末尾删除结束分割符
Semicolons 分号
PHP语言在大多数行末尾都需要分号,但是在代码块的末尾可以省略它们。Drupal编码标准要求有分号,即使在代码块的末尾。
<?phpprint$tax;?>--yes
<?phpprint$tas?>--noName Conventions 命名约定
Function and variables
函数应该使用小写字母命名,单词要使用下划线分割。此外函数名还应该使用模块名/分组名做为前缀,以免冲突。
变量应该使用小写字母命名,单词使用大写字母,例如: $lowerCamelCase 或下划线 $snake_case.但要始终如一,不要混合使用。
Persistent Variables
持久变量(使用Drupal的variable_get() / variable_set()函数定义/设置)应该使用小写字母命名,使用下划线分割。它们应该使用模块/分组名称作为前缀,以免模块之间冲突。
Constants
1.常量总是使用大写,用下划线分割。
2.模块定义的常量名称还应该以它们的模块的大写拼写最为前缀。
3.在Drupal 8或更高的版本中,常量应该使用const PHP关键字(不是define())来定义,性能更好。
注意:const不适合PHP表达式。定义一个常量或非文字值时应该使用define():
<?php
constCACHE_TEMPORARY=-1;
if(!defined('MAINTENANCE_MODE')){
define('MAINTENANCE','error');
}
Global Variable
如果需要定义全局变量,则其名字应该以单个下划线开头,后面紧跟模块/主题名和另一个下划线
File Name
所有的文档文件具有文件扩展名.txt,以便于在Windows系统上查看,此外这些文件的文件名应该大写(README.txt而不是readme.txt)示例:README.txt,INSRALL.txt,TODO.txt等。
Helper Modules
有几个贡献的模块可以协助审查代码标准的遵从性:
1. Coder
2. Dreditor
3. PAReview
4.Coder Sniffer
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。