> ## Documentation Index
> Fetch the complete documentation index at: https://discuz.p.cafe/llms.txt
> Use this file to discover all available pages before exploring further.

# 编码规范

> 本规范由编程原则组成，融合并提炼了开发人员长时间积累下来的成熟经验，意在帮助形成良好一致的编程风格。

## **前言**

本规范由编程原则组成，融合并提炼了开发人员长时间积累下来的成熟经验，意在帮助形成良好一致的编程风格。

## **适用范围**

如无特殊说明，以下规则要求完全适用于Discuz!项目，同时也可大部分适用于腾讯云旗下其他PHP项目。

## **标准化的重要性和好处**

当一个软件项目尝试着遵守公共一致的标准时，可以使参与项目的开发人员更容易了解项目中的代码、弄清程序的状况。使新的参与者可以很快的适应环境，防止部分参与者出于节省时间的需要，自创一套风格并养成终生的习惯，导致其它人在阅读时浪费过多的时间和精力。而且在一致的环境下，也可以减少编码出错的机会。

* 程序员可以了解任何代码，弄清程序的状况
* 新人可以很快的适应环境
* 防止新接触PHP的人出于节省时间的需要，自创一套风格并养成终生的习惯
* 防止新接触PHP的人一次次的犯同样的错误
* 在一致的环境下，人们可以减少犯错的机会
* 程序员们有了一致的标准

## **PHP编码规范与原则**

### **代码标记**

PHP程序可以使用`<?php ?>`来界定 PHP 代码，在HTML页面中嵌入纯变量时，可以使用`<?php echo $variablename;?>`这样的形式。

**注意：** 为了使代码进一步规范化和标准化，从Discuz! X2版本起开始禁用`<? ?>`和`<?=$variablename?>`这种速记形式。

### **注释**

注释是对于那些容易忘记作用的代码添加简短的介绍性内容。请使用 C 样式的注释`/* */`和标准 C++ 注释`//`。在Discuz!每一个程序文件头部中，应放入相应SVN控制字串，以方便SVN提交时自动更新。

### **书写规则**

#### **缩进**

每个缩进的单位约定是一个TAB(4个空白字符宽度)，需每个参与项目的开发人员在编辑器中进行强制设定，以防在编写代码时遗忘而造成格式上的不规范。本缩进规范适用于PHP、JavaScript中的函数、类、逻辑结构、循环等。

#### **大括号、if和switch**

* 首括号与关键词同行，尾括号与关键字同列
* if结构中，else和elseif与前后两个大括号同行，左右各一个空格。另外，即便if后只有一行语句，仍然需要加入大括号，以保证结构清晰
* switch结构中，通常当一个case块处理后，将跳过之后的case块处理，因此大多数情况下需要添加break

#### **运算符、小括号、空格、关键词和函数**

* 每个运算符与两边参与运算的值或表达式中间要有一个空格，唯一的特例是字符连接运算符号两边不加空格
* 左括号应和函数关键词紧贴在一起，除此以外应当使用空格将(同前面内容分开
* 右括号除后面是)或者.以外，其他一律用空格隔开它们
* 除字符串中特意需要，一般情况下，在程序以及HTML中不出现两个连续的空格
* 任何情况下，PHP程序中不能出现空白的带有TAB或空格的行
* 每段较大的程序体，上、下应当加入空白行，两个程序块之间只使用1个空行，禁止使用多行
* 程序块划分尽量合理，过大或者过小的分割都会影响他人对代码的阅读和理解

#### **函数定义**

* 参数的名字和变量的命名规范一致
* 函数定义中的左小括号，与函数名紧挨，中间无需空格
* 开始的左大括号与函数定义为同一行，中间加一个空格，不要另起一行
* 具有默认值的参数应该位于参数列表的后面
* 函数调用与定义的时候参数与参数之间加入一个空格
* 必须仔细检查并切实杜绝函数起始缩进位置与结束缩进位置不同的现象

#### **引号**

PHP中单引号和双引号具有不同的含义：

* 单引号中，任何变量、特殊转义字符不会被解析，因此PHP的解析速度更快
* 双引号中，变量值会代入字符串中，特殊转义字符也会被解析成特定的单个字符
* 数组中，如果下标不是整型，而是字符串类型，请务必用单引号将下标括起，正确的写法为`$array['key']`
