温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Coding Standards

发布时间:2020-05-31 23:09:15 来源:网络 阅读:477 作者:ADUJ 栏目:web开发

参考链接:https://www.drupal.org/docs/develop/standards/coding-standards

Indenting and Whitespace 缩进和空格

使用2个空格,不是tabs。

行的结束不应该有空格。

所有的文本文件的在行的结尾以换行符\n结尾。

PHP文件开头的所有块应该使用空行分割。这包括/**@file*/块,命名空间声明和use语句以及文件中的后续代码。

So,for example,a file header might look as follows:

 

<?php

namespace This\Is\The\Namespace;

use Drupal\foo\bar;

/**
 * Provides example.
*/
class ExampleClassName {}

.module文件

<?php

/**
 * @file
 * Provides example functionality
*/

use Drupal\foo\Bar;

/**
 * Implements hook_help().
*/
function example_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) {
  case 1:
    action;
    break;

  case 2:
    action;
    break;

  default:
    defaultaction;
}

For d-while statements:

 

do {
  actions;
} while ($condition);

模板控制语句 .tpl.php

 

<?php if (!empty($item)) : ?>
  <p><?php print $item; ?></p>
<?php endif; ?>

<?php foreach ($items as $item): ?>
  <p><?php print $item; ?></p>
<?php endforeach; ?>

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) {
  return FALSE;
}

不应该将条件包装成多行。

控制结构条件也不应该试图赢得“最少线条代码奖”中的最紧凑条件:

 

// DON'T DO THIS!
if ((isset($key) && !empty($user->uid) && $key == $user->uid) ||
(isset($user->cache) ? $user->cache : '') == ip_address() || isset($value)
&& $value >= $time())) {
  // ...
}

// Key is only valid if it matches the current usr's ID, as otherwise
other
// users could access any user's things.
$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 = new MyClassName();
// 这也是为了与有参数的构造函数保持一致
$foo2 = new MyClassName($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('The title of your node.'),
]

注意,最后一个元素末尾的逗号,如果其他元素稍后放置末尾,有助于防止错误解析。

请注意,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编码标准要求有分号,即使在代码块的末尾。

 

<?php print $tax; ?> -- yes
<?php print $tas ?> -- no

Name 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
const CACHE_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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI