内部用Drupal/PHP开发规范1.2
前言
常言道,“没有规矩,不成方圆”。良好的编程风格与规范对开发者以及项目管理人员都是非常重要的。
当一个软件项目尝试着遵守公共一致的标准时,可以使参与项目的开发人员更容易了解项目中的代码、弄清程序的状况。使新的参与者可以很快的适应环境,防止部分参与者出于节省时间的需要,自创一套风格并养成终生的习惯,导致其它人在阅读时浪费过多的时间和精力。而且在一致的环境下,也可以减少编码出错的机会。缺陷是由于每个人的标准不同,所以需要一段时间来适应和改变自己的编码风格,暂时性的降底了工作效率。从使项目长远健康的发展以及后期更高的团队工作效率来考虑暂时的工作效率降低是值得的,也是必须要经过的一个过程。标准不是项目成功的关键,但可以帮助我们在团队协作中有更高的效率并且更加顺利的完成既定的任务。
第1章、排版规则
1.1、缩进
代码缩进使用2个空格,而不是tab键,因为在不同的编辑器查看代码时,tab键的显示出来的长度根是不一样的,虽然空格会增加文件的大小,这些误差是微不足道的。
在很多编辑器中,都可以设置将tab键设置为2个空格,如果你习惯使用tab键的话。
1.2、空格规则
空格应该在以下情况下使用:
1. 关键字与(之间应该有1个空格,例:
while ($user->uid > 0) {
?>
2. 函数名和(之间不应该有空格,例:
function arg() {
?>
3. 一元操作符与其操作数之间不应该有空格,除非操作数是个单词,例:typeof。
4. 每个在控制部分,例for语句中,“;”后必须跟一个空格。
5. 每个,后应跟一个空格。
1.2.1、逻辑运算符前后都必须加空格,加一减一运算除外
// 正确
$a == $b;
// 错误
$a==$b;
$a ==$b;
// 正确
$a++;
$a--;
// 错误
$a ++;
$a --;
?>
1.2.2、多个参数分隔时必须加空格
// 正确
$a, $ab, $c;
arg($a, $b, $c);
// 错误
$a,$ab,$c;
arg($a,$b,$c);
?>
1.2.3、语法关键字后必须加空格
if, for, while, switch等关键字。
例:
// 正确
for ($a = 0;$ // 错误
for($a = 0;$ ?>
1.3、字符串和变量的连接规则
字符串与变量连接使用“.”,且在“.”左右都有1个空格,使用"自动转义变量时必须在变量前后加“{}”
// 正确
$result = 'file_' . $var;
$result = 'file_{var}';
// 错误
$result = 'file_'.$var;
$result = 'file_$var';
?>
1.4、每行一个语句,除非这些语句有很密切的联系,否则每行只写一个语句。用空行来将逻辑相关的语句分隔开以提高程序的可读性。
正确
$node_types = node_get_types('types', NULL, TRUE);
foreach ($node_types as $type => $info) {
//
}
?>
错误
$node_types = node_get_types('types', NULL, TRUE);
foreach ($node_types as $type => $info) {
//
}
?>
1.5、关键字
if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要有完整的括号{}
例:
正确
if (NULL == $arg) {
return;
}
?>
错误
if (NULL == $arg) return;
?>
1.5.1、if
格式如下:
if (condition) {
//
}
if (condition) {
//
} else {
}
if (condition) {
//
} else {
//
}
?>
1.5.2、for
格式如下:
for ($i = 0; $i //
}
?>
1.5.3、do
格式如下:
不像其他复合语句,do语句总是以“;”结束。
do {
//
} while (condition);
?>
1.5.4、do
格式如下:
switch (expression) {
case expression:
statements;
default:
statements;
}
?>
每一组statements(除了default,应以break、return或者throw结尾。不要让它顺次往下执行。)
1.5.5、try
格式如下:
try {
statements
} catch (variable) {
statements
}
?>
1.6、数据库
* 查询语句中关键字部分应该大写。
第2章、命名规范
命名统一遵守Linux C命名规范,包括PHP、XHTML、CSS、JS。
变量名所有字母都小写,使用“_”作为每个词的分界(CSS中使用“-”,因为很多drupal生成的代码都用“-”(例如区块ID,通常为类似#block-vacation)。),变量名必须有一定的意义,使程序一目了然。
在项目中,相同意义的变量变量名应该尽量相同,例:drupal项目中$node表示节点,节点在很多地方都使用到,如果命名相同,一眼就可知道这是个节点,可以使用节点的相关函数操作,如要区分多个节点,则可以加上有意义的字母在前,例:$book_node、$color_node。
2.1、常量
PHP的常量应该全部使用大写字母,并使用_来正确的分隔字词。
常量使用模块名来作为前缀,这样个可以避免常用字词的冲突。例:你的模块名为test.module,那么常量名字应该如例TEST_USER。
define('TEST_CONFIRM_UID', 0);
?>
2.2、全局变量
全局变量命名规则:$_模块名(主题名)_全局变量名
例:
// 错误
globe $records;
// 正确
globe $_test_records;
?>
2.3、静态变量
静态变量使用前缀s,例:
$s_records;
?>
2.4、临时变量
不要将在循环中频繁使用的临时变量如$i、$j等用于其他用途。
2.5、函数命名
函数名采用C GUN的惯例,所有字母使用小写字母,规则:模块名+_+函数名,要注意的是命名时不要与drupal的相关hook重名。
2.6、文件名命名
文件名应该都是小写的。例外情况就是文档文件,它们全部大写并且类型为txt文件。
例如:
LICENSE.txt
README.txt
INSTALL.txt
第3章、编程规范
系统统一使用时间戳time()作为时间标志,存入mysql时使用INT(10)类型写入。
引号使用单引号,只有当引号重叠时才使用双引号,这样每进程可以省几百K内存。
统一使用
?>,禁止使用
?>
3.1、数组定义规则
key、值必须使用单/双引号。
// 正确
array(
'name' => 'myname',
'type' => 'mytype'
);
// 错误
array(
name => myname,
type => mytype
);
?>
3.2、不采用缺省方式测试变量/函数
// 正确
if ($user > 0) {
//
}
if (arg(1) != '') {
//
}
// 错误
if ($user) {
//
}
if (arg(1)) {
//
}
?>
3.3、文件结构规则
drupal模块开发规则如下(以模块名为book为例):
主模块(book.module)包含 hook_help()、hook_init()、hook_menu()以及该模块的一些共用函数,如需要调用其他模块的函数(必须启用的核心模块除外),应先判断该模块是否开启(例:module_exists('book');)。
book.admin.inc(管理页面相关代码)、book.page.inc(用户操作所用代码),应该归类放置,使用hook_menu中“file”键指向。
模块中使用到的一些js插件,如jquery插件,应放在模块目录中js文件夹中。
3.4、数据库操作规则
* 查询1条以及多条记录时,使用db_query_range()。
* 每次查询如果可以都应该加上ORDER针对INDEX排序。
3.5、注释
注释文档遵循Doxygen注释样式,注释块语法如下(包括css、js):
/**
* Implementation of hook_cron().
*/
function node_cron() {
db_query('DELETE FROM {history} WHERE timestamp }
?>
注释块必须紧挨着放在函数前,中间不存在空行。
drupal能够理解下面所列的Doxygen构造体,具体构造体作用请参照Doxygen文档:
* @mainpage
* @file
* @defgroup
* @ingroup
* @addtogroup
* @param
* @return
* @link
* @see
* @{
* @}
3.5.1、// $id$
“// $id$”用于追踪版本号以及最后修改的用户,以注释方式放在每个文件最前头(包括js、css等所有需要提交到版本库的文件)。当把代码提交到CVS(SVN),系统将会自动对这一标签进行解析和扩展,变成如下:
// $Id: node.module,v 1.947.2.29 2010/12/15 12:53:33 goba Exp $
?>
第4章、编写安全的代码
4.1、处理用户输入输出
非drupal hook_form生成的表单(包括一些ajax)提交上的数据,应该进行安全过滤。以下列出drupal提供的一些过滤函数。
* check_plain(HTML),转换为纯文本,将特定字符转换为HTML实体。
* filter_xss(HTML),使用一组标签,检查和清理HTML
* check_markup(HTML),使用过滤器(可以自定义)过滤
* drupal_urlencode(URL),将特定字符编码为%0x
* check_url(URL),清理url中有害协议,例如javascript:runevilJS()
通常在输出中,应该用t()函数,来过滤输出,以便支持drupal的多语言模块。
4.2、处理mysql语句
进行数据库的增删查改操作时,都要使用db_query()函数(drupal7使用方法有变动,具体请参照相关资料),表名必须使用大括号,这样在有数据库前缀的时候,可以自动判断。如下:
/**
* Implementation of hook_cron().
*/
function node_cron() {
db_query('DELETE FROM {history} WHERE timestamp }
?>
4.2.1、使用db_rewrite_sql()来保持私有数据的私有性
如果启用了节点访问模块对节点访问进行了权限控制,那么直接通过db_query()查出的数据是无法进行权限过滤的,这时候,需要用到db_rewrite_sql(),在一些节点数据的操作上,如果mysql语句没处理到权限部分,则必须使用该函数。例:
$result = db_query(db_rewrite_sql("SELECT DISTINCT b.* FROM {blocks} b LEFT JOIN {blocks_roles} r ON b.module = r.module AND b.delta = r.delta WHERE b.theme = '%s' AND b.status = 1 AND (r.rid IN (". db_placeholders($rids) .") OR r.rid IS NULL) ORDER BY b.region, b.weight, b.module", 'b', 'bid'), array_merge(array($theme_key), $rids));
?>
第5章、其他重要杂项
* 不到万不得已,不修改drupal核心代码,如有修改,应在开发文档中有记录。
* 模块中HTML展示部分尽量都使用默认风格,例、table(theme('table', $header, $rows))、list(theme('item_list', $items))等,如特殊风格部分,HTML、CSS都应该写在模块中,而不是依赖主题,这样,在主题的切换中,就不会导致无法使用。
* 所有的链接都必须使用l()函数,该函数会自动判断网站根目录位置,避免在网站迁移后有死链接。
* 访问权限控制尽量捆绑在hook_menu上,不应该在函数内有过多的判断。

“你的组织要求你更改PIN消息”将显示在登录屏幕上。当在使用基于组织的帐户设置的电脑上达到PIN过期限制时,就会发生这种情况,在该电脑上,他们可以控制个人设备。但是,如果您使用个人帐户设置了Windows,则理想情况下不应显示错误消息。虽然情况并非总是如此。大多数遇到错误的用户使用个人帐户报告。为什么我的组织要求我在Windows11上更改我的PIN?可能是您的帐户与组织相关联,您的主要方法应该是验证这一点。联系域管理员会有所帮助!此外,配置错误的本地策略设置或不正确的注册表项也可能导致错误。即

Windows11将清新优雅的设计带到了最前沿;现代界面允许您个性化和更改最精细的细节,例如窗口边框。在本指南中,我们将讨论分步说明,以帮助您在Windows操作系统中创建反映您的风格的环境。如何更改窗口边框设置?按+打开“设置”应用。WindowsI转到个性化,然后单击颜色设置。颜色更改窗口边框设置窗口11“宽度=”643“高度=”500“>找到在标题栏和窗口边框上显示强调色选项,然后切换它旁边的开关。若要在“开始”菜单和任务栏上显示主题色,请打开“在开始”菜单和任务栏上显示主题

默认情况下,Windows11上的标题栏颜色取决于您选择的深色/浅色主题。但是,您可以将其更改为所需的任何颜色。在本指南中,我们将讨论三种方法的分步说明,以更改它并个性化您的桌面体验,使其具有视觉吸引力。是否可以更改活动和非活动窗口的标题栏颜色?是的,您可以使用“设置”应用更改活动窗口的标题栏颜色,也可以使用注册表编辑器更改非活动窗口的标题栏颜色。若要了解这些步骤,请转到下一部分。如何在Windows11中更改标题栏的颜色?1.使用“设置”应用按+打开设置窗口。WindowsI前往“个性化”,然

您是否在Windows安装程序页面上看到“出现问题”以及“OOBELANGUAGE”语句?Windows的安装有时会因此类错误而停止。OOBE表示开箱即用的体验。正如错误提示所表示的那样,这是与OOBE语言选择相关的问题。没有什么可担心的,你可以通过OOBE屏幕本身的漂亮注册表编辑来解决这个问题。快速修复–1.单击OOBE应用底部的“重试”按钮。这将继续进行该过程,而不会再打嗝。2.使用电源按钮强制关闭系统。系统重新启动后,OOBE应继续。3.断开系统与互联网的连接。在脱机模式下完成OOBE的所

任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过,如果您的硬件规格可以处理它并且您喜欢预览版,则可以启用它。如何在Windows11中启用任务栏缩略图预览?1.使用“设置”应用点击键并单击设置。Windows单击系统,然后选择关于。点击高级系统设置。导航到“高级”选项卡,然后选择“性能”下的“设置”。在“视觉效果”选

在Windows11上的显示缩放方面,我们都有不同的偏好。有些人喜欢大图标,有些人喜欢小图标。但是,我们都同意拥有正确的缩放比例很重要。字体缩放不良或图像过度缩放可能是工作时真正的生产力杀手,因此您需要知道如何对其进行自定义以充分利用系统功能。自定义缩放的优点:对于难以阅读屏幕上的文本的人来说,这是一个有用的功能。它可以帮助您一次在屏幕上查看更多内容。您可以创建仅适用于某些监视器和应用程序的自定义扩展配置文件。可以帮助提高低端硬件的性能。它使您可以更好地控制屏幕上的内容。如何在Windows11

屏幕亮度是使用现代计算设备不可或缺的一部分,尤其是当您长时间注视屏幕时。它可以帮助您减轻眼睛疲劳,提高易读性,并轻松有效地查看内容。但是,根据您的设置,有时很难管理亮度,尤其是在具有新UI更改的Windows11上。如果您在调整亮度时遇到问题,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10种方式解释]单显示器用户可以使用以下方法在Windows11上调整亮度。这包括使用单个显示器的台式机系统以及笔记本电脑。让我们开始吧。方法1:使用操作中心操作中心是访问

Windows上的激活过程有时会突然转向显示包含此错误代码0xc004f069的错误消息。虽然激活过程已经联机,但一些运行WindowsServer的旧系统可能会遇到此问题。通过这些初步检查,如果这些检查不能帮助您激活系统,请跳转到主要解决方案以解决问题。解决方法–关闭错误消息和激活窗口。然后,重新启动计算机。再次从头开始重试Windows激活过程。修复1–从终端激活从cmd终端激活WindowsServerEdition系统。阶段–1检查Windows服务器版本您必须检查您使用的是哪种类型的W


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

记事本++7.3.1
好用且免费的代码编辑器

Atom编辑器mac版下载
最流行的的开源编辑器