您好,登錄后才能下訂單哦!
使用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){
為了便于閱讀,所有的二元運(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中。
控制結(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);
<?php if (!empty($item)) : ?>
<p><?php print $item; ?></p>
<?php endif; ?>
<?php foreach ($items as $item): ?>
<p><?php print $item; ?></p>
<?php endforeach; ?>
以下規(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) {
// ...
}
函數(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)
當(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);
數(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)目沒有明確要求使用。
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.";
始終在圓點(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();
在無條件的包含一個(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 ?>來分割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
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
免責(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)容。