我是靠谱客的博主 跳跃大船,最近开发中收集的这篇文章主要介绍PHP项目开发经验整理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. 遵守PSR规范,详细参考Accepted部分
  2. 数据库设计规范(参考)详细参考
  3. 以数据表为单位设计“微服务”,详细参考
  4. 尽量提炼抽取共同的函数、方法
  5. 合并重复的条件代码片段
    不良代码示例:
function paginate($page=1, $pageTotal=10)
{
	if($page < 1){
		$page =1 ;
		redirectTo($page);
	}
	else if($page > $pageTotal){
		$page = $pageTotal;
		redirectTo($page);
	}
	else{
		redirectTo($page);
	}
}

改进代码示例:

function paginate($page=1, $pageTotal=10)
{
	if($page < 1){
		$page =1 ;
	}
	else if($page > $pageTotal){
		$page = $pageTotal;
	}
	
	redirectTo($page);
}
  1. 把条件分支语句提炼成函数
    提炼之前代码示例:
$month = date('m');

if(in_array($month, [1, 11, 12])){
	echo 'winter', PHP_EOL;
}

提炼之后:

function isWinter($month){
	if(in_array($month, [1, 11, 12])){
		return true;
	}
	
	return false;
}

$month = date('m');

if(isWinter($month)){
	echo 'winter', PHP_EOL;
}
  1. 合理利用循环
    未优化的代码:
function isAnyParamEmpty($params){
	if(empty($params['a'])){
		echo 'a can not be empty', PHP_EOL;

		return true;
	}
	if(empty($params['b'])){
		echo 'b can not be empty', PHP_EOL;

		return true;
	}
	if(empty($params['c'])){
		echo 'c can not be empty', PHP_EOL;

		return true;
	}
	if(empty($params['d'])){
		echo 'd can not be empty', PHP_EOL;

		return true;
	}

	return false;
}

优化后的代码:

function isAnyParamEmpty($params){
	foreach ($params as $key => $param) {
		if(empty($param)){
			echo "$key can not be empty", PHP_EOL;

			return true;
		}
	}

	return false;
}
  1. 提前让函数退出(注意条件语句及循环语句中的代码)
    改进前的代码:
function process($params)
{
	$ret = true;

	if(empty($params['a'])){
		$ret = false;
	}

	$data = getData();

	if(empty($data)){
		$ret = false;
	}

	return $ret;
}

改进后的代码:

function process($params)
{
	if(empty($params['a'])){
		return false;
	}

	$data = getData();

	if(empty($data)){
		return false;
	}

	return true;
}
  1. 使用一个数组或对象参数代替参数列表,可以避免参数错位也提高了可扩展性
    改进前的代码:
//万一某一天要扩展更多参数则可能需要修改之前调用的代码
function process($param1, $param2) 
{
	echo $param1, PHP_EOL;
	echo $param2, PHP_EOL;
}

process('a', 1);
process(1, 'a');

改进后的代码:

function process($params)
{
	echo $params['a'], PHP_EOL;
	echo $params['b'], PHP_EOL;

	// 如果process($params)之前已经被大量应用,扩展参数c不会对之前的代码产生破坏
	if(!empty($params['c'])){ 
		echo $params['c'], PHP_EOL;
	}
}

process(['a' => 'a', 'b' => 1]);
process(['a' => 'a', 'b' => 1, 'c'=> 'hello,world']);
  1. 涉及复杂业务处理的地方尽量避免使用链式调用,这样才能使业务逻辑更加清晰,便于维护。如果只是对数据的操作处理,且每个开发维护人员没有业务障碍,则可以优雅地使用链式操作。
  2. 如果开发中发现函数或方法里的代码即将开始膨胀,则需要重新捋一下业务逻辑,进行代码拆分、提取。
  3. 为了维护方便,同一模块对接不同平台的情况下(处理逻辑有不一样的地方)按平台名称(建议使用拼音首字母缩写)划分文件夹,如需要对两个渠道A和B的订单进行处理,则处理的分别为路径为A/OrderService.php、B/OrderService.php,避免在一个OrderService.php里面使用两个方法 public function generateOrderA($params)public function generateOrderB($params)分别处理,使用不同的文件夹和文件可以减少git提交冲突
  4. 同一模块的不同功能可以按不同文件夹进行开发,如订单模块可以按不公功能设计程序文件保存到app(前台提交)、import(后台导入)、cron(定时任务)、queue(队列)等文件夹下,避免在同一个文件下完成不同的功能
  5. 避免trait嵌套,每个trait应该是独立的功能,不要组装不同trait的功能
  6. 基础数据接口和前端数据接口按不同系统项目分开,便于做到“大中台、小前端”,提供给前端的接口调用微服务化的基础数据接口并进行整合,按需提供给前端app使用
  7. 充分利用依赖包完成业务开发,但是如果要得到更优的性能则还是尽量使用PHP扩展
  8. 充分利用PHP自带函数进行开发,避免自己重复造轮子
  9. 充分利用索引优化查询
  10. 充分利用缓存、队列、事件、定时等技术提升业务能力和服务性能
  11. 尽量实施微服务架构
  12. 做好git版本控制管理
  13. 要求写好单元测试
  14. 项目成员要熟悉业务,并根据掌握的业务规则随时优化代码
  15. 一定要有个备忘系统,便于记录之前出现过的问题及解决办法,或者已经确定下来的业务决定等
  16. 项目完成后一定要及时进行总结,包括技术方面和管理方面。
  17. 目标明确,优化项目分工,避免项目并行,提高效率,敏捷开发、小步快跑、快速迭代
  18. 项目团队成员有问题尽量当面沟通,本着“能当面不微信,能微信不邮件”的原则进行沟通。项目人员尽量“走起”,“谁主张谁举证”,有问题或不清楚的东西主动走到需要询问对象跟前进行沟通,不要在工位上等微信,甚至等邮件。
  19. 对相应岗位人员充分授权,充分发挥人员的主观能动性和创造力。疑人不用,用人不疑。对项目人员要有信心和信任。
  20. 目标驱动,避免疲软型的加班,项目完成后大家一定要有收获。
  21. 网站性能优化攻略
  22. 大型网站技术架构设计思维导图
  23. 一种更为高效的数据库无限级分类表设计
  24. PHP学习中比较少注意到的地方
  25. 代码中要把业务相关代码和非业务相关代码进行隔离

最后

以上就是跳跃大船为你收集整理的PHP项目开发经验整理的全部内容,希望文章能够帮你解决PHP项目开发经验整理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部