溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Coding Standards

發(fā)布時(shí)間:2020-05-31 23:09:15 來源:網(wǎng)絡(luò) 閱讀:489 作者:ADUJ 欄目:web開發(fā)

參考鏈接:https://www.drupal.org/docs/develop/standards/coding-standards

Indenting and Whitespace 縮進(jìn)和空格

使用2個(gè)空格,不是tabs。

行的結(jié)束不應(yīng)該有空格。

所有的文本文件的在行的結(jié)尾以換行符\n結(jié)尾。

PHP文件開頭的所有塊應(yīng)該使用空行分割。這包括/**@file*/塊,命名空間聲明和use語(yǔ)句以及文件中的后續(xù)代碼。

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 運(yùn)算符

為了便于閱讀,所有的二元運(yùn)算符(兩個(gè)值之間的運(yùn)算)例如 + ,-,=,!=,==,>等應(yīng)該在運(yùn)算符前后有個(gè)空格。

 

$foo = $bar;
// not
$foo=$bar;

一元運(yùn)算符(僅操作一個(gè)值得運(yùn)算符)(例如++,--)在運(yùn)算符與其操作的變量或數(shù)字之間不應(yīng)有空格。

檢查弱類型不等式必須使用!=運(yùn)算符,<> 不能使用與PHP中。

Control Structures 控制結(jié)構(gòu)

控制結(jié)構(gòu)包括: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.

控制語(yǔ)句應(yīng)該在控制關(guān)鍵字和左括號(hào)之間有個(gè)空格,以便將它們與函數(shù)調(diào)用區(qū)分開來。即使在技術(shù)上可選的情況下也要使用花括號(hào)。

For switch statements:

 

switch (condition) {
  case 1:
    action;
    break;

  case 2:
    action;
    break;

  default:
    defaultaction;
}

For d-while statements:

 

do {
  actions;
} while ($condition);

模板控制語(yǔ)句 .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

以下規(guī)則適用于代碼。 有關(guān)注釋的規(guī)則,請(qǐng)參閱Doxygen和注釋格式約定

通常,所有代碼不應(yīng)超過80個(gè)字符。

包含更長(zhǎng)函數(shù)名,函數(shù)和類定義,變量聲明的可以超過80個(gè)字符。

控制條件超過80個(gè)字符可以這樣寫:

 

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;
}

不應(yīng)該將條件包裝成多行。

控制結(jié)構(gòu)條件也不應(yīng)該試圖贏得“最少線條代碼獎(jiǎng)”中的最緊湊條件:

 

// 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 函數(shù)調(diào)用

函數(shù)應(yīng)該在函數(shù)名稱,左括號(hào)和第一個(gè)參數(shù)之間沒有空格,逗號(hào)和每個(gè)參數(shù)之間有空格,最后一個(gè)參數(shù),右括號(hào)和分號(hào)之間沒有空格。

 

$var = foo($bar, $baz, $quux);

Function Delarations 函數(shù)聲明

帶有默認(rèn)值的參數(shù)出現(xiàn)在參數(shù)列表的末尾。如果合適,要返回有意義的值。

匿名函數(shù)應(yīng)該在函數(shù)和它的參數(shù)之間有個(gè)空格,如下所示例:

 

array_map(function ($item) use (id) {
  return $item[$id];
},$itmes)

Calss Constructor Calls

當(dāng)調(diào)用的函數(shù)沒有類構(gòu)造函數(shù)時(shí),也要包含括號(hào):

 

$foo = new MyClassName();
// 這也是為了與有參數(shù)的構(gòu)造函數(shù)保持一致
$foo2 = new MyClassName($arg1, $arg2);

請(qǐng)注意,如果類名是一個(gè)變量,那么首先計(jì)算變量以獲取類名,然后再調(diào)用:

 

$bar = 'MyClassName';
$foo = new $bar();
$foo2 = new $bar($arg1, $arg2);

Arrays

數(shù)組應(yīng)該使用短陣列語(yǔ)法進(jìn)行格式化,每個(gè)元素之間使用一個(gè)空格(逗號(hào)之后),關(guān)聯(lián)數(shù)組使用=>運(yùn)算符,前后使用空格:

 

$some_array = ['hello', 'world', 'foo' => 'bar'];

注意,如果聲明數(shù)組的行超過80個(gè)字符,則應(yīng)該每個(gè)元素分成自己的行,并縮進(jìn)一級(jí):

 

$form['title'] = [
  '#type' => 'textfield',
  '#title' => t('title'),
  '#size' => 60
  '#maxlength' => 128,
  '#description' => t('The title of your node.'),
]

注意,最后一個(gè)元素末尾的逗號(hào),如果其他元素稍后放置末尾,有助于防止錯(cuò)誤解析。

請(qǐng)注意,PHP5.4之前的版本不支持短矩陣語(yǔ)法。這意味著Drupal7和Drupal7核心的語(yǔ)法的項(xiàng)目沒有明確要求使用。

Quotes 引號(hào)

Drupal沒有強(qiáng)制使用單引號(hào)與雙引號(hào)的硬性標(biāo)準(zhǔn)。在可能的情況下,保持代碼的一致性,尊重其他開發(fā)人員的風(fēng)格。

默認(rèn)情況下使用單引號(hào),除下面情況:

1.刻意的在線變量插值,"<h3>$header</h3>";

2.包含單引號(hào)的字符串,如翻譯等,"He's a good person.";

String Concatenations

始終在圓點(diǎn)(.)和連接部分使用空格提高可讀性。

 

<?php

$string = 'Foo' . $bar;
$string = bar() . 'foo';
$string = 'Foo' . 'bar';

在連接簡(jiǎn)單變量時(shí),可以使用雙引號(hào)并在其添加變量;否則,使用單引號(hào)。

 

<?php

$string = "Foo $bar";

在使用連接賦值運(yùn)算符(.=)時(shí),與賦值運(yùn)算符一樣,在每一邊使用空格。

 

<?php
$string .= 'Foo';
$string .= $bar;
$string .= baz();

Including Code

在無條件的包含一個(gè)類文件的地方,使用require_once().在有條件的包含類文件的任何地方(工廠方法),請(qǐng)使用include_once().兩個(gè)都確保只包含一次類文件。它們共享文件列表。

注意:include_once()和require_once是語(yǔ)句,而不是函數(shù)。您不需要使用括號(hào)包含文件名。

當(dāng)包含同一目錄或子目錄的代碼時(shí),用 . 開始文件路徑。

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代碼,而不是簡(jiǎn)寫<? ?>.

從drupal4.7開始,代碼文件末尾的?>被省略。這包括模塊和包文件。

1.刪除它可以消除文件末尾不必要的空白,可能導(dǎo)致“文件頭已發(fā)送”錯(cuò)誤,XHML/XML驗(yàn)證問題和其他問題。

2.文件末尾的結(jié)束分割符是可選的

3.PHP.net本省從文件末尾刪除結(jié)束分割符

Semicolons 分號(hào)

PHP語(yǔ)言在大多數(shù)行末尾都需要分號(hào),但是在代碼塊的末尾可以省略它們。Drupal編碼標(biāo)準(zhǔn)要求有分號(hào),即使在代碼塊的末尾。

 

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

Name Conventions 命名約定

Function and variables 

函數(shù)應(yīng)該使用小寫字母命名,單詞要使用下劃線分割。此外函數(shù)名還應(yīng)該使用模塊名/分組名做為前綴,以免沖突。

變量應(yīng)該使用小寫字母命名,單詞使用大寫字母,例如: $lowerCamelCase 或下劃線 $snake_case.但要始終如一,不要混合使用。

Persistent Variables

持久變量(使用Drupal的variable_get() / variable_set()函數(shù)定義/設(shè)置)應(yīng)該使用小寫字母命名,使用下劃線分割。它們應(yīng)該使用模塊/分組名稱作為前綴,以免模塊之間沖突。

Constants 

1.常量總是使用大寫,用下劃線分割。

2.模塊定義的常量名稱還應(yīng)該以它們的模塊的大寫拼寫最為前綴。

3.在Drupal 8或更高的版本中,常量應(yīng)該使用const PHP關(guān)鍵字(不是define())來定義,性能更好。

  注意:const不適合PHP表達(dá)式。定義一個(gè)常量或非文字值時(shí)應(yīng)該使用define():

 

<?php
const CACHE_TEMPORARY = -1;

if (!defined('MAINTENANCE_MODE')) {
  define('MAINTENANCE', 'error');
}

Global Variable

如果需要定義全局變量,則其名字應(yīng)該以單個(gè)下劃線開頭,后面緊跟模塊/主題名和另一個(gè)下劃線

File Name

所有的文檔文件具有文件擴(kuò)展名.txt,以便于在Windows系統(tǒng)上查看,此外這些文件的文件名應(yīng)該大寫(README.txt而不是readme.txt)示例:README.txt,INSRALL.txt,TODO.txt等。

Helper Modules

有幾個(gè)貢獻(xiàn)的模塊可以協(xié)助審查代碼標(biāo)準(zhǔn)的遵從性:

1. Coder

2. Dreditor

3. PAReview

4.Coder Sniffer


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI