PHP编码规范

简介: 纯PHP文件,不要写 ‘?>’ 闭合标签。保持最后一行留空即可。PHP的闭合标签可能会在一些框架中造成编码问题。这个一定要注意,否则出了问题可能没有办法锁定问题的来源。

良好的PHP编码规范能让你的代码看起来更加的优雅,清晰的结构有助于提高可读性并减少工作量。

一:编码格式

文件应该使用 Unicode (UTF-8) 编码保存,不要使用 字节序标记(BOM) 。与 UTF-16 和 UTF-32 不同,UTF-8 编码的文件不需要指明字节序,而且 字节序标记(BOM) 在PHP中会产生预期之外的输出,阻止了应用程序设置它自己的头信息。

如果保存带BOM的编码,会在文件头输出类似ufeff的内容。这样是不好的,会导致JSON等数据无法正常读取。

二:PHP闭合标签

纯PHP文件,不要写 ‘?>’ 闭合标签。保持最后一行留空即可。

PHP的闭合标签可能会在一些框架中造成编码问题。

这个一定要注意,否则出了问题可能没有办法锁定问题的来源。

例如:

php

复制代码

<?php
    phpinfo();

三:代码缩进

使用Tab键来缩进,每个Tab键长度设置为4个空格;

四:代码换行

为了保证代码的可读性。请注意代码换行。

例:

ini

复制代码

$dataList = DB::select("
SELECT p1.id,p1.personal_id,p2.name ,p2.id AS userid
          FROM student_group_detail p1
         LEFT JOIN user p2 ON p1.userid=p2.id
         WHERE p1.grpid = '{$grpid}'
         ORDER BY p1.userid,p1.personal_id ASC");

五:命名规则

1:类命名规则:使用大驼峰式(StudlyCaps)写法;

2:方法命名规则:(类的)方法名 使用小驼峰(cameCase)写法;

3:函数命名规则:函数名使用 小写字母 + 下划线 写法,如 function http_send_post();

4:变量命名规则:变量名 使用小驼峰写法,如 $userName;

六:代码注释

良好的代码注释,方便其他同事更快捷的阅读你的代码。

1:类注释:要标记好创建人,类的功能,及创建时间。

php

复制代码

/**
 * @name 微信小游戏数据统计类
 * @author camellia
 * @date 20200703
 */
class ReckonController extends AppHttpControllerscommonCommonController
{
}

2:方法注释:要标记好方法功能,创建人,创建时间,参数含义,及返回值

java

复制代码

/**
     * @name 获取微信小游戏统计页列表
     * @author camellia
     * @date 20200703
     * @param id 用户群组ID student_group_detail表外键
     * @return json
     */
    public function getWxGameReckonList()
{
}

3:单行注释

ini

复制代码

// 定义一个空数组,用来存储返回值
        $group = array();
        // 计算数组长度
        $dataNum = count($dataList);

4:多行注释,这里有一个小技巧。

perl

复制代码

/*if (!isset($_REQUEST['id'])) //1-2-45 分割样式
        {
            $result['code'] = -1;
            $result['msg'] = '系统故障-参数携带不全';
            return $result;
        }
        $grpid = strim($_REQUEST['id']);//*/

注意看我结束位置的注释写法,这样写的好处是,解除注释的时候,你只需要将开头的/*删除就可以了。后边的可以不用理会。

5:一个项目多人协作开发,不可避免的会出现组员之前互相交叉改代码的一个情况,修改别人的代码的时候,注释的格式:

标注添加时间,并标注为何添加。

arduino

复制代码

// ========================================================
// add by camellia 20200703 微信小游戏统计
// 获取微信小游戏统计列表
Route::get("/getWxGameReckonList", 'WxGameReckonController@getWxGameReckonList');
// 获取微信小游戏用户关卡详情
Route::get("/getUserLevelDetail", 'WxGameReckonController@getUserLevelDetail');

七:控制结构

这里的控制结构主要指if-elseif-else 与 switch-case

(1):if-elseif-else

php

复制代码

<?php
if ($expr1) { // if 与 ( 之间有一个空格,) 与 { 之间有一个空格
} elseif ($expr2) { // elesif 连着写,与 ( 之间有一个空格,) 与 { 之间有一个空格
} else { // else 左右各一个空格
}

(2):switch-case

php

复制代码

<?php
switch ($expr) { // switch 与 ( 之间有一个空格,) 与 { 之间有一个空格
    case 0:
        echo 'First case, with a break'; // 对齐
        break; // 换行写break,也对齐。
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
    case 4:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}

在 "switch" 语句中应该总是包括 "default" 控制。

八:变量声明及使用

1:普通变量:声明此类变量的时候,用描述性的变量的命名,采用小驼峰式写法。像 i 或 i 或 i n 等等都是不建议使用的。

2:全局变量:声明此类变量的时候,需要给其附默认值。

3:静态变量:其是存储在服务器的运行内存中,因此不宜声明过多,容易造成内存崩溃。

4:常量:命名有意义,采用大写字母加下划线的形势命名。

九:业务模块

1:涉及到多个数据表 更新/添加 操作时,最外层要用事务,保证数据库操作的原子性;

2:业务逻辑统一封装到 Mode层;

4:控制器只做URL路由,不要当作 业务方法 调用;

5:控制器层不能出现SQL操作语句,如 ThinkPHP框架的 where()、order() 等模型方法,即,控制器中,不要出现类似这样的SQL语句:D('XXX')->where()->order()->limit()->find(); where()、order()、limit() 等SQL方法只能出现在 Model层

十:开发注意事项

1:一个PHP文件中,至允许声明一个类。

2:不允许使用三元运算符来进行判断。

3:大括号的开始必须在类名的下一行顶格。例如:

kotlin

复制代码

class Think
{
    // ...
}

4:函数或方法的初始大括号应该在函数声明的下一行顶格。例如:

csharp

复制代码

function get_client_ip()
{
    // …
}

5:引用只允许定义在函数参数中,实时传递引用是禁止的。例如:

php

复制代码

/
/ 引用定义在函数参数-允许的
function defineRefInMethod(&$a)
{
    $a = 'a';
} 
defineRefInMethod($b);
echo $b; // 'a'
// 实时传递引用-禁止的
function callTimePassRef($a)
{
    $a = 'a';
}
callTimePassRef(&$c);
echo $c; // 'a'

有好的建议,请在下方输入你的评论

欢迎访问个人博客 guanchao.site

目录
相关文章
|
NoSQL 算法 网络安全
一份完整的阿里云 Redis 开发规范,值得收藏!
一份完整的阿里云 Redis 开发规范,值得收藏!
2218 0
|
9月前
|
人工智能 自然语言处理 运维
AI时代 创作何为?AI如何重塑IT行业格局
本文探讨了AI时代创作的本质与IT行业的变革。在创作领域,AI带来范式革新、价值重构及能力升级;在IT行业,AI推动技术架构智能化、开发流程优化和业务模式创新。同时,文章分析了AI带来的挑战与机遇,并展望了AI与IT深度融合的未来,强调需关注伦理法规与跨领域发展,共同迎接智能化新时代。
1496 58
|
11月前
|
运维 Cloud Native 开发工具
智能运维:云原生大规模集群GitOps实践
智能运维:云原生大规模集群GitOps实践,由阿里云运维专家钟炯恩分享。内容涵盖云原生运维挑战、管理实践、GitOps实践及智能运维体系。通过OAM模型和GitOps优化方案,解决大规模集群的发布效率与稳定性问题,推动智能运维工程演进。适用于云原生环境下的高效运维管理。
413 8
|
10月前
|
缓存 小程序 API
微信小程序网络请求与API调用:实现数据交互
本文深入探讨了微信小程序的网络请求与API调用,涵盖`wx.request`的基本用法、常见场景(如获取数据、提交表单、上传和下载文件)及注意事项(如域名配置、HTTPS协议、超时设置和并发限制)。通过一个简单案例,演示了如何实现小程序与服务器的数据交互。掌握这些技能将帮助你构建功能更丰富的应用。
|
人工智能 PyTorch 算法框架/工具
Ascend Extension for PyTorch是个what?
Ascend Extension for PyTorch 是针对华为昇腾处理器的PyTorch框架适配插件,旨在让PyTorch开发者能充分利用昇腾AI处理器的强大计算能力。此扩展通过最小化对原生PyTorch的改动,实现了对昇腾NPU的支持,包括动态图特性、自动微分等功能的完整继承,并提供了与原生PyTorch一致的使用体验。项目详情及源码可在昇腾社区获取。
Ascend Extension for PyTorch是个what?
|
存储 NoSQL 算法
阿里面试:亿级 redis 排行榜,如何设计?
本文由40岁老架构师尼恩撰写,针对近期读者在一线互联网企业面试中遇到的高频面试题进行系统化梳理,如使用ZSET排序统计、亿级用户排行榜设计等。文章详细介绍了Redis的四大统计(基数统计、二值统计、排序统计、聚合统计)原理和应用场景,重点讲解了Redis有序集合(Sorted Set)的使用方法和命令,以及如何设计社交点赞系统和游戏玩家排行榜。此外,还探讨了超高并发下Redis热key分治原理、亿级用户排行榜的范围分片设计、Redis Cluster集群持久化方式等内容。文章最后提供了大量面试真题和解决方案,帮助读者提升技术实力,顺利通过面试。
|
存储 设计模式 Java
阿里官方代码规范
这篇文章详细介绍了阿里巴巴官方的代码规范,包括命名规则、常量使用、方法覆写、并发处理、注释规范、数据库设计等多个方面,旨在提高代码的可读性、维护性和扩展性。
|
安全 物联网 数据安全/隐私保护
ensp中PPPOE (点对点协议)原理和配置命令
ensp中PPPOE (点对点协议)原理和配置命令
713 0
|
供应链 数据库 UED
商城如何设计订单系统超级有用
商城如何设计订单系统超级有用
491 0
|
Python
BUUCTF RSA 1
BUUCTF RSA 1
434 0