//

Information for details

浅谈php开发中编码规范之四

9 编程惯例


9.1 常量


位于for循环中作为计数器值的数字常量,除了-1,0和1之外,不应被直接写入代码。

9.2 变量赋值


避免在一个语句中给多个变量赋相同的值。它很难读懂。例如:

$fooBar.fChar = $barFoo.lchar = 'c'; // 错误


不要将赋值运算符用在容易与相等关系运算符混淆的地方。例如:

if ($c++ = $d++) { // 错误 

  ...

}


应该写成

if (($c++ = $d++) != 0) {

  ...

}


不要使用内嵌(embedded)赋值运算符试图提高运行时的效率,这是编译器的工作。例如:

$d = ($a = $b + $c) + $r; // 错误


应该写成

$a = $b + $c;

$d = $a + $r;



9.3 其他惯例


9.3.1 圆括号


一般而言,在含有多种运算符的表达式中使用圆括号来避免运算符优先级问题,是个好方法。即使运算符的优先级对你而言可能很清楚,但对其他人未必如此。你不能假设别的程序员和你一样清楚运算符的优先级。

if ($a == $b && $c == $d) // 错误

if (($a == $b) && ($c == $d)) // 正确


9.3.2 大括号


在三种主要的大括号放置规则中,有两种是可以接受的,如下的第一种是最好的: 

将大括号放置在关键词下方的同列处: 

if (condition)

{

  ...


  while (condition)

  {

    ... 

  } 

}

传统的UNIX的括号规则是,首括号与关键词同行,尾括号与关键字同列: 

if (condition) { 


  ...


  while (condition) {


    ...


  } 

}

引起剧烈争论的非原则的问题可通过折衷的办法解决,两种方法任意一种都是可以接受的,然而对于大多数人来说更喜欢第一种。原因就是心理研究学习范畴的东西了。 

对于更喜欢第一种还有着更多的原因。如果您使用的字符编辑器支持括号匹配功能的话(例如vi),最重要的就是有一个好的样式。为什么?我们说当你有一大块的程序而且想知道这一大块程序是在哪儿结束的话。你先移到开始的括号,按下按钮编辑器就会找到与之对应的结束括号,例如:


if (veryLongCondition && secondVeryLongCondition)

{

  ...

}

else if (...)

{

  ...

}

从一个程序块移动到另一个程序块只需要用光标和你的括号匹配键就可以了,不需找匹配的括号。



9.3.3 返回值


设法让你的程序结构符合目的。例如:

if (booleanExpression) {

  return true;

} else {

  return false;

}


应该代之以如下方法:

return booleanExpression;


类似地:

if (condition) {

  return x;

}

return y;


应该写做:

return (condition ? x : y);



9.3.4 运算符"?"前的表达式


如果一个包含二元运算符的表达式出现在三元运算符" ? : "的"?"之前,那么应该给表达式添上一对圆括号。例如:

(x >= 0) ? x : -x;


9.3.5 特殊注释


在注释中使用XXX来标识某些未实现(bogus)的但可以工作(works)的内容。用FIXME来标识某些假的和错误的内容。

10 代码范例


/*

 * @(#)Cngift.php 1.82 03/06/25

 *

 * 开花石头编写的示例文档

 * 将对编码规范做简单的示范

 * 

 */



require( “db.php” );


/**

 * 示范用类

 *

 * @version 1.82 03.06.25

 * @author 开花石头

 */

class Blah extends SomeClass {

  /* 这个类运行时的注释写在这里 */


  /** 关于变量的注释写在这里 */

  static int $classVar1;


  /**

   * 对变量编写的多行注释写在这里

   */

  static string classVar2;


  /** 变量的文档注释 */

  int instanceVar1;


  /** 变量的文档注释 */

  int[] instanceVar3;


  /**

   * 构造函数的注释

   */

  function Blah() {

    // ...在这里执行...

  }


  /**

   * ...函数的文档注释...

   */

  function doSomething() {

    // ...在这里执行...

  }


  /**

   * ...方法的注释文档..

   * 多行注释

   */

  public void doSomethingElse(Object someParam) {

    // ...在这里执行...

  }

}


  • 滇公网安备 53010202001388号