PHP 解说:PHPer 这些核科技你都掌握了吗?

背景:近来身边的同事在 PHP 进阶上出现了一些疑惑。有的人是觉得新技术层出不穷,想接触学习新的技术。如 Golang。有的人是不知道接下来的学习方向而迷茫。于是,今天我结合自身以及一些 PHP 领域一些大年的总结给大家梳理梳理。有说得不对之处,请大家留言指教。谢谢!

一、开发工具

为什么会把开发工具当作一个点来讲,是因为很多人在选择 PHP 开发工具的时候会被身边的同事或朋友或业内所熟知的大件使用推荐的开发工具所左右。曾经本人也有这样的经历。比如,刚开始我使用 PHP 官方开发的 ZendStudio 开发工具。后来,发现这个开发工具太重了而且性能不佳。于是身边的朋友推荐了 Sublime Text。再后来,由于 Sublime Text 在很多使用上总是要装插件。恰好当时出现了 VSCode,很多人评价挺高就一直用到现在。
我觉得开发工具,选择一款自己喜欢的熟悉的主流的即可。唯手熟乐。

二、PHP 基础知识

这里所讲的基础知识并不仅仅包括 PHP。也包含其他知识。大致有下面这些点:

  • 数据类型
  • 文件目录操作
  • 正则表达式
  • JSON
  • 面向对象
  • 命名空间
  • 异常与错误
  • SPL
  • MySQL CURD
  • GD 图像操作
  • 数学相关函数
  • 字符串函数
  • 数组函数
  • COOKIE
  • SESSIO
  • GET/POST/文件上传
  • 协程
  • 设计模式
  • HTTP 协议

因为 PHP 主要应用领域是在 Web 开发。所以,我们必须把 HTTP 协议相关的细节要熟练掌握。比如,Header/Body。特别是 HTTP 协议头里面的各种各样数据。

这里我推荐几本书。

  • 《细说 PHP 2》 这本书我的很多朋友都学得还不错。所以,我推荐。
  • 《图解 HTTP 协议》 这本书我深入看过觉得非常不错。
  • 《MySQL 必知必会》 这本书我看过也挺不错。既能覆盖日常开发的东西,又不会有太多高深的理论。非常实用。

所以,大家一定要把这些基础的东西牢牢掌握。

三、PHP 进阶知识

这里所讲的进阶是针对实战开发所需要的技术做铺垫而言。

1)API 接口设计

现在的互联网企业,基本上都会开发一款属于自己的 APP。即使没有 APP,也会有微信公众号、小程序等。所以,作为一名准备在 PHP 这个领域深耕的开发者。API 接口设计就变得十分的迫切和重要。
关于 API 接口设计,我在之前写过一篇文章:《API 设计指南》

2)PHP 命令行模式开发

之前我写过一篇 PHP 命令行相关的文章,大家可以去了解一下:《PHP 命令行模式》

我觉得每一个 PHP 开发者都必须掌握在命令行模式下的开发技能。它经常被用在定时器任务、常驻进程等任务的开发。曾经我见过一个 PHP 开发同事,它不会使用 PHP 命令行来开发需求。于是就在 Linux Crontab 里面定时去调用一个 http 连接来实现任务的定时处理。可以说这就是不会 PHP 命令行模式开发的一种直接表现。

所以,PHP 命令行模式开发是 PHPer 必须掌握技能。

3)PHP 多进程

对 PHP 了解比较深入的朋友都知道 PHP 是没有多线程概念的。当然,也有好事者开发了一个多线程的扩展。但是,这个扩展本身也有诸多的限制。所以,当前使用的人也并不多。所以,我们只需要掌握 PHP 多进程即可。

那么,多进程有哪些用途呢?
1)消息队列消费。当队列数据单进程模式无法快速消费的时候。我们可以通过多进程来加快消费。比如:短信发送、APP 消息推送等。
2)金融业收益计算。当面临上百万的收益计算时,单进程肯定无法在短时间之内完成。所以,多进程就显得很有必要。

当然,用途并非只有如上两点。凡是单进程无法加快业务的情形,基本上都可以用多进程来搞定。

我之前写过一个多进程的类。非常实用,并且经过了大量的业务证明是可用。https://github.com/fingerQin/phpthread

如果你不喜欢我写的这个工具类。你也可以使用 Swoole 的多进程工具。swoole 官网地址:https://www.swoole.com/

4)PHP 事件/消费

在如今越来越复杂的业务系统当中,我们通常会通过事件来进行系统的解耦。所谓事件,是指系统当中某个动作/功能被触发了。那么,此时我们将这个动作相应的属性记录到 Redis 这样的 list 队列当中记录起来。然后,再编写一个消费脚本去消费这个队列。这就完成了事件的记录与消费。

那么,我们为什么需要事件呢?
4.1) 短信发送
很多小系统会在获取验证码的时候会直接调用第三方的短信接口发送短信。但是,对于大系统来讲,可能由于活动的推广带来瞬间流量的上升。从而对短信接口造成短时间的并发压力。像聚合这样的平台提供的接口才 30 的并发(可能会随着系统升级这个并发者有变化)。这很容易造成短信频繁的发送失败。直接在获取短信验证码的时候发送知道就会造成没办法重发短信。

所以,我们可以将短信发送的需求,不仅仅是验证码发送,系统短信通知的需求也通过事件来事件来异步消费。达到服务的高可用。

4.2)耗时操作异步化
除了 4.1 讲的短信这种特殊的并发限制需要解耦外。那么剩下的就是一些耗时的操作了。比如,注册赠送福利、下单赠送礼品、生日自动关联各种福利。总之,如果同步做的话,会导致一个正常的情况会让用户等待很长时间。并且当底层系统负载较高时,有可能会赠送失败。所以,异步可以完成解决这些问题。失败了,我们可以重试。直到成功为止。即使最终无法操作成功。我们也能通过细节日志。针对性处理这种失败。

5)日志记录

我待过很多团队。发现大部分开发者除了框架自身记录的错误日志之外,不喜欢记录任何的日志。它们通常只会根据错误日志来进行系统的修复。然而,目前主流的框架我都使用过。它们的错误日志有时候并不能帮助你解决一些业务上的代码 BUG。

于是,我在当前所在公司用 Yaf 自研了一款业务框架。每个报错我都会报错所属的文件名、行号、类名、方法名、参数值、堆栈信息全部记录到日志。每当报错的时候,我会把参数全部拿出来在本地反复验证这个方法看看 BUG 出现在哪里。如果是现有的框架,它是没有方法参数值这一个东西。导致每次线上报错只能在本地反复要把涉及这个位置的流程重新走一遍。假如这个 BUG 是与某个用户或某个特殊值才产生的。那么,这个测试过程就更耗时了。

一定要养成记录日志的习惯。前期业务上线,日志多一点能快速定位问题。后期业务稳定可以逐步关减掉部分冗余日志。

6)Session 分布式存储

如今的系统已经不是当初单台打天下的时候了。少则四五台,大则几千上万台的。这个时候,Session 肯定不能存放在单台机器上了。目前主流的方式都是存放在诸如 Redis 这样的缓存系统当中。

这里要注意:Session 分布式存储有两重概念。一种是服务器这种业务分布式系统的 Session 存储(通常也是指这种)。一种是 Redis 服务器的分布式。就是把存储在 Redis 里面的数据进行分布式架构设计。

四、业务知识

光有技术总是少了一点灵魂的东西————业务知识。

  • 电商业务。
  • 金融业务。基金、P2P。
  • Sass 平台。

同时也包含:

  • 微信支付。
  • 支付宝支付。
  • 银联支付。

这样会完整自己的技术链与业务链。

五、总结

掌握以上技能以及业务之后,基本上面临任何业务与技能挑战的时候,也有足够的底气支撑。

希望本篇文章能帮助那些正处于疑惑或迷惑的朋友们。

博主 2011 年创建了一个《PHP 初学者官方群》,目前群成员 500 人左右。群号:168159147。为了防止广告,设置为付费入群。欢迎大家加入讨论技术!

标签: 无

发表评论: