二次开发-开发方法-自定义扩展-编码规范
本帖最后由 adminlily 于 2020-12-14 16:24 编辑Combodo编码标准此页面是iTop编码约定的简要说明(主要用于PHP)。 iTop编码约定与PSR-2标准,但也要注意很多重要的区别!
源代码文件以UTF-8编码(没有BOM在文件的开头)。
换行符必须为Lf。
PHP文件必须在文件<?php的开头使用长PHP开头的标签,但不得包含任何关闭标签的PHP。这样可以防止在文件末尾错误地添加多余的空白字符,这些空白字符将被附加到页面生成的标签上。
一个编辑器配置 文件可用在iTop存储库中.
在iTop中,所有代码均以英语编写:函数,变量,类名和注释均应以有效的英语编写。
字符串定界符
您可以使用任何喜欢的定界符,主要目的是保持代码可读性。
使用时heredoc / nowdoc,我们建议使用分隔符[ ttps://www.jetbrains.com/help/phpstorm/using-language-injections.html]JetBrains的语言注入.
例子 :
$sHtml = '<a href="h ">';
$sFooBarBaz = "{$foo}-{$bar} {$baz}";
$sJs = <<<JS
console.debug("this is some JS code");
console.debug("having the right delimiter keyword will help language injection !");
变量命名
变量,职能参数和对象属性使用混合大小写约定命名(即所有小写字母,每个单词开头都有大写字母)和用作类型提示的前缀字母:
[*]一个前缀用于哈希或数组(PHP没有任何区别:每个数组实际上是一个哈希)
[*]i前缀用于整数
[*]o前缀用于PHP对象
[*]s前缀用于字符串
[*]很少使用:f表示浮点数(即非整数),r或h可用于资源句柄。
例:<?php
$iCount = 1;
$sText = 'This is a text';
$oPage = new WebPage('test');
$fRank = 1.25;
$hDir = ('/opt');
// No PHP closing tag
没有前缀的变量应该是混合类型(可以是字符串,数组或对象)
例:
public function Set($sAttCode, $value) { ...}
允许的例外
[*]用于循环计数器的局部变量(例如$ i,$ j)可能没有前缀。
[*]在涉及大量数字变量的数学计算中,可以删除此类变量的前缀(例如$ x,$ y,$ xMax…)是可以接受的
[*]由于历史原因,WebPage类(及相关类)以及MetaModel中的某些部分使用不同的约定:变量均为小写字母,并带有下划线字符以分隔单词。对象属性(成员)使用m_前缀作为前缀。
功能命名
函数和对象方法使用混合大小写约定命名(即所有小写字母,每个单词开头均带有大写字母)。即使PHP对职能的名称不区分大小写,这也有助于区分项目的功能与通常用小写形式编写的PHP内置功能。职能名称通常基于表示正在执行的职能的动词。
例:
function DisplayWelcomePopup(WebPage $oP) { // Code goes here}
关于可视化和其他关键字顺序,PSR-2状态 :
可视化必须在所有属性和方法上声明;摘要和最终结果必须在可视化之前声明;必须在可视化之后声明静态。
空格和缩进
自 2020 年 8 月 28 日以来,此约定已更改。基本代码将随时更新(由于错误/增强原因修改时按函数函数)。
缩进使用制表符(将编辑器配置为将制表符显示为4个字符宽)
开括号(对于classes, functions, if/else, try/catch, switch)必须放在下一行,闭括号必须在正文之后的下一行。闭合支架必须与相应的开口支架垂直对齐。
例:
class NiceWebPage extends WebPage { ... public function SetContentType($sContentType) { if($sContentType == '') { // Do something } else { // Do something different } }}
编写职能调用时,在职能名称后紧跟在括号之间提供的参数:职能名称与参数列表之间没有空格。每个参数列表中的逗号后跟一个空格。
例:
$sValue = Utils::ReadParam('param1', 'default_value');
二进制运算符(==,+,&&)被空格包围。
例外:串联运算符。不被空格包围,因为当使用非比例字体时,这倾向于使行更紧凑,并且不会降低代码的可读性。
例:
if (($aPerson[$this->iPersonId]) && ($aPerson[$this->iPersonId] != "")) { if ($this->sSynchronizeOrganization == 'yes') { $sName = $aPerson[$this->iPersonId]['first_name'].' '.$aPerson[$this-
>iPersonId]['last_name']; }}
php文件
存储库本身描述了编写PhpDoc的规则:请参阅/.doc/README.md.
词典条目
这本身就是一个主题,请参见专用的Wiki页面:[ ttps://www.itophub.io/wiki/page?id=2_7_0%3Acustomization%3Atranslation]如何翻译
页:
[1]