# 編碼規范
## 編碼規范
XiunoPHP 提倡 Linux 的編碼風格(小寫 + 下劃線),與 PHP 默認的命名風格保持一致,但如果您喜歡匈牙利和駱駝也沒有關系。
### 1. 變量名,函數名全部為: 小寫 + 下劃線,比如:
```
<pre class="calibre11">```
<?php
$uid = 0;
$username = '';
mysql_connect();
mysql_query();
mysql_fetch_assoc();
?>
```
```
### 2. 常量全部大寫:
```
<pre class="calibre11">```
<?php
define('DEBUG', 1); // 1: 開發模式, 2: 線上調試:日志記錄,0: 關閉
define('APP_NAME', 'www');
?>
```
```
### 3. 空格,縮進,換行,參考以下格式:
一個 TAB = 8 個空格,盡量減少 TAB 縮進。
```
<pre class="calibre11">```
<?php
function array_addslashes(&$var) {
if(is_array($var)) {
foreach($var as $k=>&$v) {
array_addslashes($v);
}
} else {
$var = addslashes($var);
}
return $var;
}
?>
```
```
### 4. 單引號、雙引號:
在PHP 當中,盡量使用單引號,解析速度比雙引號快。
如果里面包含變量,為了代碼的美觀,可以使用雙引號。
在雙引號中的數組 key 不應該加單引號。
在單引號中僅僅轉義 \\,其他字符都不轉義,如 \\t\\r\\n $。
以下為正確用例:
```
<pre class="calibre11">```
<?php
$sitename = '我在北京吸霧霾';
$info = "站點名稱:$sitename";
$info = "用戶名:$user[name]";
?>
```
```
### 5. 類、繼承、接口、構造、析構、魔術方法:
盡量不要使用 PHP 高級特性。
高級特性往往不利于底層的優化,需要更多的學習和溝通成本。
比如 **get()** set() \_\_call() 會讓代碼變得很難讀,IDE 提示也不友好。
不是剛需,不要用。
### 6. 正則表達式:
盡量使用單引號,分隔符為 # 。
禁止使用 e 修飾符,如果剛需,請使用 preg\_replace*callback() 代替。
盡量使用 \\w \\s \\S 內置的表示方法,不要啰嗦的去寫 \[0-9a-zA-Z*\] 。
為什么不用 / 作為分隔符?
因為 WEB 開發過程中,字符串中出現 / 的概率太高。
以下正則格式符合標準:
preg\_match('#\\w+@\\w+.\\w+#is', $email);
### 7. include include\_once require require\_once:
盡量使用 include,速度快,并且不會中斷業務邏輯。
require 在文件不存在或不可讀的時候,會暴力終止業務邏輯。
### 8. error\_reporting:
在本地開發環境下使用,使用 E\_ALL,消滅所有 NOTICE。
線上環境使用 0,并且配置 php.ini error\_log 記錄到服務器日志,避免錯誤信息外泄。
### 9. 模板:
不要用 Smarty 等任何類型的模板“引擎”,他們不時真正意義上的引擎,只是一堆正則替換而已。而且效率低下,學習的時間成本高,浪費腦細胞。
直接使用 PHP 的 原生標簽,比如:
```
<pre class="calibre11">```
<?php include "./view/htm/header.inc.htm"; ?>
Hello, <?php echo $username; ?>!
<?php include "./view/htm/footer.inc.htm"; ?>
```
```
### 10. 目錄約定:
為了便于部署和排查,約定以下目錄用途(非強制):
```
<pre class="calibre11">```
Web 目錄:/home/wwwroot/xxx.com
Web 日志:/home/wwwlog
MySQL 數據:/home/mysql
備份目錄:/home/backup
Nginx 配置文件:/usr/local/nginx/conf/nginx.conf
MySQL 配置文件:/etc/my.cnf
PHP 配置文件:/usr/local/php/etc/php.ini
PHP-CGI 配置文件:/usr/local/php/etc/php-fpm.conf
```
```
### 11. 生產環境推薦:
CentOS + PHP7 + MySQL 5+ Opcache + Yac
- XiunoPHP 入門
- 什么是 XiunoPHP?
- 關于 URL 格式
- 編碼規范
- 全局變量
- $starttime
- $time
- $conf
- $ip
- $longip
- $ajax
- $method
- $db
- $cache
- $errno
- $errstr
- 數據庫函數
- DB 配置
- db_insert()
- db_create()
- db_replace()
- db_update()
- db_delete()
- db_find_one()
- db_find()
- db_count()
- db_maxid()
- db_connect()
- db_truncate()
- db_sql_find()
- db_sql_find_one()
- db_exec()
- db_new()
- db_close()
- 緩存函數
- CACHE 配置
- cache_set()
- cache_get()
- cache_delete()
- cache_truncate()
- cache_new()
- 數組增強
- array_value()
- array_filter_empty()
- array_addslashes()
- array_stripslashes()
- array_htmlspecialchars()
- array_trim()
- array_diff_value()
- array_assoc_slice()
- arrlist_multisort()
- arrlist_cond_orderby()
- arrlist_key_values()
- arrlist_values()
- arrlist_change_key()
- arrlist_chunk()
- 雜項函數
- xn_strlen()
- xn_substr()
- xn_urlencode()
- xn_urldecode()
- xn_json_encode()
- xn_json_decode()
- xn_encrypt()
- xn_decrypt()
- xn_message()
- xn_error()
- xn_log()
- xn_txt_to_html()
- xn_rand()
- xn_is_writable()
- humandate()
- humannumber()
- humansize()
- param()
- lang()
- url()
- pagination()
- is_robot()
- http_get()
- http_post()
- https_get()
- https_post()
- http_multi_get()
- file_replace_var()
- file_get_contents_try()
- file_put_contents_try()
- in_string()
- file_ext()
- file_pre()
- file_name()
- http_url_path()
- glob_recursive()
- rmdir_recusive()
- copy_recusive()
- _GET() _POST() _COOKIE() ...