PHP编码规范的深入探讨(2)


function funstuff_system($field) {
  $system["description"] = t("This module inserts funny text into posts randomly.");
  return $system[$field];
}


类构造器调用(Class Constructor Calls)
当调用不带参数的类构造器时,始终包含括号
$foo = new MyClassName();

带参数的类构造器
$foo = new MyClassName($arg1, $arg2);
如果使用变量做为类名,需先为变量赋值,然后才调用类构造器:

复制代码 代码如下:


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


数组(Array)
数组的值之间应使用空格分隔,赋值操作符号(=>)左右也应包含空格:
$some_array = array('hello', 'world', 'foo' => 'bar');
当声明数组的字符长度超过80个字符(通常在构造表单和菜单时),应该将各元素分行、缩进编写:

复制代码 代码如下:


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


注意:最后一个数组元素末尾有一个逗号,这并不是手误,而是避免有新元素加入到最后之后因缺少逗号而出现解析错误。(从某种程度上来讲,在最后一个数组元素末尾加上逗号是一种推荐的做法,甚至在向drupal.org提交代码时,一些代码规范检测脚本会因为最后一个元素没有添加逗号而出现警告提示。)

引号(Quotes)
Drupal 对于单引号和双引号的使用并没有很强硬的标准,只需在同一模块内保持用法的统一即可。
使用单引号的效率要高于双引号,因为解析器不需要到引号之间查找变量。以下是使用双引号的两种情况:
引号中间带有变量,如"<h2>$header</h2>"
引号中间带有单引号,使用双引号可避免对单引号的转义 "He's a good person." 当然也可以使用单引号,但 .pot 解析器不能很好的处理这种情况,而且看起来怪怪的'He\'s a good person.'

字符串连接(String Concatenations)
在点与要连接字符串之间需要加入空格以加强代码可读性:
如果只是简单地连接变量,可以使用双引号
使用连接赋值符(.=)时,需要在符号两侧预留空格

注释(Comment)
注释规范单独在 Doxygen及注释格式规范页面 讨论

引入代码(Including Code)
任何无条件引用文件的情况下,使用 require_once(), 任何有条件引用文件的情况,则使用 include_once(). 这两条语句都会保证文件只被引入一次。
当从当前目录或子目录引入代码时,始终以点路径开头
include_once ./includes/mymodule_formatting.inc
在 Drupal 7 及更新版本中,使用 DRUPAL_ROOT 常量:
require_once DRUPAL_ROOT . 'https://www.jb51.net/' . variable_get('cache_inc', 'includes/cache.inc');
PHP 代码标签(PHP Code Tags)
始终使用<?php ?>来界定PHP代码而不使用要<? ?>。这是为了遵循Drupal规范,同时也便于代码在其它系统和平台中被引用。
自 Drupal 4.7 开始,最后的 ?> 都故意被忽略不写,原因如下:
移除它可以避免在文件末尾出现空白字符,这些空白字符可能导致“文件头已发送(header already sent)”错误,XHTML/XML验证错误,及其它问题
PHP 官方说明 结尾的PHP界定符是可选项
PHP.net 自身也移除了文件末尾的界定符(如 prepend.inc )

分号(Semicolons)
PHP 语言要求除了代码块以外,大多数行尾都要跟上分号。Drupal 代码规范同样有此要求,并且对于代码块也是如此。以下是一个单行代码块的示例:
 -- YES
 -- NO
示例 URL(Example URL)
使用 example.com 表示所有示例 URLs
命名规范(Naming Conventions)
函数与变量(Functions and Variables)
函数与变量名称应该使用小写字母,且单词之间使用下划线分隔。函数应该使用模块组/模块名称作为前缀,以避免与不同模块间的冲突。
持久变量(Persistent Variables)
持久变量是指通过 variable_get()/variable_set() 函数取得和设置的变量,变量名称应该使用小写字母,且单词之间使用下划线进行分隔。持久变量也应该使用模块组/模块名称作为前缀,以避免与不同模块间的冲突。

常量(Constants)
常量始终要求使用全大写字母,且单词之间使用下划线进行分隔。(包括PHP内置常量 TRUE, FALSE, NULL)
模块中定义的常量需始终使用大写的模块名称作为前缀。
在 Drupal 8 及之后,应使用 const 关键词代替 define() 函数来定义常量,因为效率更高
注意 const 不能用于PHP表达式,因此在条件判断和非字面值(non-literal value ???)时,还是应当使用 define() 函数

全局变量(Global Variables)
定义全局变量时,应当使用下划线加模块/主题名称开头
类(Class)
类名应使用驼峰式命名(即单词首字母大写)

类中的方法(函数)和属性(成员变量)应使用首字母小写的驼峰式

定义访问权限时,使用 protected 而代替 private,从而其它的类可以在必要时扩展和更新方法。Protected 和 public 函数和变量不应以下划线开头。
更多关于 面向对象的编码规范
文件名(Filename)
所有文档文件都应加上 .txt 后缀,以便于 Windows 用户查看。同时,所有文件名称应该全部大写,而文件后缀应该全部小写。
如 README.txt, INSTALL.txt, TODO.txt, CHANGELOG.txt 等等。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5e1d70cdad612c825b935a78f2fd7789.html