日期:2013-03-29  浏览次数:20378 次


缩进

缩进使用4个空格,而不是 tab。如果你使用 Emacs 编辑 PEAR 代码,你应该设置 indent-tabs-mode 为 nil。下面是一个 mode hook 的示例,用于设置 Emacs 符合缩进标准(你必须确保在编辑 PHP 文件时,这些设置发生作用):

  (defun php-mode-hook ()
  (setq tab-width 4
        c-basic-offset 4
        c-hanging-comment-ender-p nil
        indent-tabs-mode
        (not
         (and (string-match "/\\(PEAR\\|pear\\)/" (buffer-file-name))
              (string-match "\.php$" (buffer-file-name))))))

这里是同等效果的 vim 规则:

  set expandtab
  set shiftwidth=4
  set softtabstop=4
  set tabstop=4


--------------------------------------------------------------------------------


控制结构

控制结构包含 if、for、while、switch 等。这里有一个 if 语句的示例和一个 switch 语句的示例:

if 语句的示例:

<?php
if ((condition1) || (condition2)) {
    action1;
} elseif ((condition3) && (condition4)) {
    action2;
} else {
    defaultaction;
}
?>

switch 语句的示例:

<?php
switch (condition) {
case 1:
    action1;
    break;
case 2:
    action2;
    break;
default:
    defaultaction;
    break;
}
?>

控制语句应该在控制关键词和开始的圆括号之间应该有一个空格,以此和函数调用进行区别。

强烈建议你总是使用花括号将控制结构各部分标识出来。即使是在技术上可以不使用花括号的地方。这可以增加代码的可读性,同时避免在结构部分增加新行后引入逻辑上的错误。

原始代码:

if (condition)
    return true;
else
    return false;

修改后的代码:

if (condition)
    do something; // 出现逻辑错误
    return true;
else
    return false;

正确的做法:

if (condition) {
    do something;
    return true;
} else {
    return false;
}


--------------------------------------------------------------------------------


函数调用

调用函数时,函数名和开始的括号之间不应该有空白字符。参数和开始及结束的括号之间不应有空格。而除第一个参数外,其他参数都应该用一个空格分隔。这里有一个示例:

<?php
$var = foo($bar, $baz, $quux);
?>

像上面的示例代码,赋值运算等号两边都应该使用一个空格。如果是相关的赋值运算,应该采用下面的形式以提供更好的可读性:

<?php
$short = foo($bar);
$long_variable = foo($baz);
?>


--------------------------------------------------------------------------------


函数定义

按照“one true brace”约定声明函数:

<?php
function fooFunction($arg1, $arg2 = '')
{
    if (condition) {
        statement;
    }
    return $val;
}
?>

“one true brace”约定就是开始的花括号单独占一行,而不是跟在其他语句后面。

具有默认值的参数应该位于参数列表的后面(事实上 PHP 语言定义也要求如此)。如果适合,函数应该总是返回一个有意义的值。这里有一个稍微长一点的示例:

<?php
function connect(&$dsn, $persistent = false)
{
    if (is_array($dsn)) {
        $dsninfo = &$dsn;
    } else {
        $dsninfo = DB::parseDSN($dsn);
    }

    if (!$dsninfo || !$dsninfo['phptype']) {
        return $this->raiseError();
    }
    return true;
}
?>


--------------------------------------------------------------------------------


注释

类型(class)的联机文档应该符合 PHPDoc(类似于 JavaDoc)的约定。更多关于 PHPDoc 的信息可以访问 http://www.phpdoc.de/ 获得。

此外,强烈鼓励使用非文档注释。一般性规则是对于那些容易忘记作用的代码添加简短的介绍性注释。

推荐使用 C 样式的注释(/* */)和标准 C++ 注释(//),而不应该使用 Perl/shell 样式的注释(#)。


--------------------------------