1、代码缩进
在书写代码的时候,必须注意代码的缩进规则,我们规定代码缩进规则如下:
在缩进中使用tab缩进,不要是空格缩进
例子:
for ( $i=0;$i<$count;$i++ ) { echo 'test'; }
2、括号的使用
在程序中进行结构控制代码编写,如if、for、while、switch等结构,大括号传统的有两种书写习惯,分别如下:
a.{ 直接跟在控制语句之后,不换行,如:
for ( $i=0;$i<$count;$i++ ) { echo 'test'; }
b.{ 在控制语句下一行,如:
for ( $i=0;$<$count;$i++ ) { echo 'test'; }
其中,a是PEAR建议的方式,但是从实际书写中来讲,这并不影响程序的规范和影响用phpdoc实现文档,所以可以根据个人习惯来采用上面的两种方式,但是要求在同一个程序中,只使用其中一种,以免造成阅读的不方便。
3、嵌入式赋值
避免嵌入式复制,例如:
if($a == get_user_info($uid)){ echo $a; }
或
while ( $a != ( $c = getchar() ) ) { ... }
4、if else swith for while等书写
对于控制结构的书写遵循以下规则:
a.在if条件判断中,如果用到常量判断条件,将常量放在等号或不等号的左边,例如:if ( 6 == $errorNum )
,因为如果你在等式中漏了一个等号,语法检查器会为你报错,可以很快找到错误位置,这样的写法要注意;
b.switch结构中必须要有default块;
c.在 for 和 wiile 的循环使用中,要警惕 continue 、 break 的使用,避免产生类似 goto 的问题;
5、每行只有一条语句
切记不要在同一行内写多条语句。
错误的:
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
正确的:
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
6、字符串
字符串使用单引号引起来,当字符串中有变量时使用双引号,并且使用大括号将变量包起来。 另外,当字符串中有单引号时,也应该使用双引号,这样就不用使用转义符。
错误的:
"My String" // no variable parsing, so no use for double quotes "My string
$foo" // needs braces 'SELECT foo FROM bar WHERE baz = \'bag\'' // ugly
正确的:
'My String' "My string {$foo}" "SELECT foo FROM bar WHERE baz = 'bag'"
7、段标记
使用 PHP 的完整标记,防止服务器不支持短标记( short_open_tag )参数。
错误的:
<? echo $foo; ?> <?=$foo?>
正确的:
<?php echo $foo; ?>
8、PHP错误
行代码时不应该出现任何错误信息,并不是把警告和提示信息关掉来满足这一点。 例如,绝不要直接访问一个你没设置过的变量(例如,$_POST 数组),
你应该先使用 isset() 函数判断下。
确保你的开发环境对所有人都开启了错误报告,PHP 环境的 display_errors 参数也开启了, 你可以通过下面的代码来检查:
if (ini_get('display_errors') == 1) { exit "Enabled"; }
有些服务器上 display_errors 参数可能是禁用的,而且你没有权限修改 php.ini 文件, 你可以使用下面的方法来启用它:
ini_set('display_errors', 1);
注解
使用 ini_set() 函数在运行时设置 display_errors 参数和通过 php.ini
配置文件来设置是不一样的,换句话说,当出现致命错误(fatal errors)时,这种方法没用。
9、常量
常量遵循和变量一样的命名规则,除了它需要全部大写。尽量使用 CodeIgniter 已经定义好的常量, 如:SLASH、LD、RD、PATH_CACHE 等。
错误的:
myConstant // missing underscore separator and not fully uppercase N // no
single-letter constants S_C_VER // not descriptive $str = str_replace('{foo}',
'bar', $str); // should use LD and RD constants
正确的:
MY_CONSTANT NEWLINE SUPER_CLASS_VERSION $str = str_replace(LD.'foo'.RD, 'bar',
$str);