Drupal/PHP/XHTML开发规范1.2
- 建江 - willietse's blog*文中涉及XHTML/CSS部分,背景为黄底. 常言道,“没有规矩,不成方圆”. 良好的编程风格与规范对开发者以及项目管理人员都是非常重要的. 当一个软件项目尝试着遵守公共一致的标准时,可以使参与项目的开发人员更容易了解项目中的代码、弄清程序的状况. 使新的参与者可以很快的适应环境,防止部分参与者出于节省时间的需要,自创一套风格并养成终生的习惯,导致其它人在阅读时浪费过多的时间和精力.
*文中涉及XHTML/CSS部分,背景为黄底
常言道,“没有规矩,不成方圆”。良好的编程风格与规范对开发者以及项目管理人员都是非常重要的。
当一个软件项目尝试着遵守公共一致的标准时,可以使参与项目的开发人员更容易了解项目中的代码、弄清程序的状况。使新的参与者可以很快的适应环境,防止部分参与者出于节省时间的需要,自创一套风格并养成终生的习惯,导致其它人在阅读时浪费过多的时间和精力。而且在一致的环境下,也可以减少编码出错的机会。缺陷是由于每个人的标准不同,所以需要一段时间来适应和改变自己的编码风格,暂时性的降底了工作效率。从使项目长远健康的发展以及后期更高的团队工作效率来考虑暂时的工作效率降低是值得的,也是必须要经过的一个过程。标准不是项目成功的关键,但可以帮助我们在团队协作中有更高的效率并且更加顺利的完成既定的任务。
代码缩进使用2个空格,而不是tab键,因为在不同的编辑器查看代码时,tab键的显示出来的长度根是不一样的,虽然空格会增加文件的大小,这些误差是微不足道的。
在很多编辑器中,都可以设置将tab键设置为2个空格,如果你习惯使用tab键的话。
空格应该在以下情况下使用:
while ($user->uid > 0) {
function arg() {
// 正确 $a == $b; // 错误 $a==$b; $a ==$b; // 正确 $a++; $a--; // 错误 $a ++; $a --;
// 正确 $a, $ab, $c; arg($a, $b, $c); // 错误 $a,$ab,$c; arg($a,$b,$c);
// 正确 for ($a = 0;$ < 10; $a++); // 错误 for($a = 0;$ < 10; $a++);
// 正确
$result = 'file_' . $var;
$result = 'file_{var}';
// 错误
$result = 'file_'.$var;
$result = 'file_$var';
$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) {
//
}
if (NULL == $arg) {
return;
}
错误
if (NULL == $arg) return;
if (condition) {
//
}
if (condition) {
//
} else {
}
if (condition) {
//
} else {
//
}
for ($i = 0; $i < 1; $i++) {
//
}
do {
//
} while (condition);
switch (expression) {
case expression:
statements;
default:
statements;
}
每一组statements(除了default,应以break、return或者throw结尾。不要让它顺次往下执行。)
try {
statements
} catch (variable) {
statements
}
#header .title a,
#header .title a:link,
#header .title a:visited,
#header .title a:active {
text-decoration: none;
color: #aaa;
}
#header .title a:hover {
color: #930;
}
define('TEST_CONFIRM_UID', 0);
// 错误 globe $records; // 正确 globe $_test_records;
$s_records;
(1)页面结构类 容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper (2)导航类 导航:nav 主导航:mainnav 子导航:subnav 顶导航:topnav 边导航:sidebar 左导航:leftsidebar 右导航:rightsidebar 位置导航: crumb 菜单:menu 子菜单:submenu 面包屑:breadcrumb(即页面所处位置导航提示) (3)网页内容类 标题: title 摘要: summary 箭头: arrow 商标: label 网站标志: logo 转角/圆角: corner 横幅广告: banner 栏目: column 子菜单: subMenu 搜索: search 搜索框: searchBox 登录: login 工具条: toolbar 下拉: drop 标签页: tab 当前的: current 列表: list 滚动: scroll 服务: service 提示信息: msg 新闻: news 小技巧: tips 下载: download 栏目标题: title 热点: hot 加入: joinus 注册: regsiter 指南: guide 友情链接: friendlink 状态: status 版权: copyright 按钮: btn 合作伙伴: partner 投票: vote 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left right center 登录条:loginbar 标志:logo 广告:banner 页面主体:main 热点:hot 新闻:news 下载:download 子导航:subnav 菜单:menu 子菜单:submenu 搜索:search 友情链接:friendlink 页脚:footer 版权:copyright 滚动:scroll 内容:content 标签页:tab 文章列表:list 提示信息:msg 小技巧:tips 栏目标题:title 加入:joinus 指南:guild 服务:service 注册:regsiter 状态:status 投票:vote 合作伙伴:partner
// 正确 array( 'name' => 'myname', 'type' => 'mytype' ); // 错误 array( name => myname, type => mytype );
// 正确
if ($user > 0) {
//
}
if (arg(1) != '') {
//
}
// 错误
if ($user) {
//
}
if (arg(1)) {
//
}
.left {
float: left;
}
.f10 {
font-size: 10px;
}
/**
* Implementation of hook_cron().
*/
function node_cron() {
db_query('DELETE FROM {history} WHERE timestamp < %d', NODE_NEW_LIMIT);
}
注释块必须紧挨着放在函数前,中间不存在空行。
drupal能够理解下面所列的Doxygen构造体,具体构造体作用请参照Doxygen文档:
// $Id: node.module,v 1.947.2.29 2010/12/15 12:53:33 goba Exp $
/**
* Implementation of hook_cron().
*/
function node_cron() {
db_query('DELETE FROM {history} WHERE timestamp < %d', NODE_NEW_LIMIT);
}
$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));