PHP7 特性和优化总结

in PHP with 0 comment

两种模式

使用 declare(strict_types=1); 声明在头部

类型速查

https://www.php.net/manual/zh/language.types.declarations.php

标量类型

复合数据类型

特殊数据类型

两者的区别

总而言之,核心就是 严格模式下: 严格限制返回类型 严格限制传入类型

默认模式下 则是可选的(不会报错)

解构赋值

list($a, $b) = [$a, $b];
...[$a, $b];

NULL 合并运算符

$user = ['name' => 'dcf'];
echo $user['age'] ?? "[error] 不存在的值";

太空操作符

用的比较少,场景可以放在 sort 中进行使用,反正回调函数 就是需要返回 0,-1,1
echo 1 <=> 1 // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

Define 定义常量

场景用来构建可变参数参量,早起的 const 无法支持定义一个 可变变量常量,参考如下
const HOST = getenv('HOST'); // 此方法 将 error: 表达式不允许作为常量值
define('HOST_T', getenv('HOST_T')); // 正常运行

匿名类

不参考,不建议使用

命名空间 use

缩减代码量,也不是太建议,当包多的时候有些包名容易重复,不适合全局搜索管理
//use Intervention\Image\AbstractFont;
//use Intervention\Image\Image;
//use Intervention\Image\ImageManager;

use Intervention\Image\{AbstractFont, Image, ImageManager};

生成器

不建议使用,维护成本,使用不当容易出问题,推荐异步函数或者 JOB 队列处理

intdiv

var_dump(intdiv(200, 3)); // 不会进行四舍五入,向下取整

整体的性能提升

  1. JIT
  2. Zval 的改变

https://www.laruence.com/2018/04/08/3170.html

  1. 内部类型 zend_string
  2. PHP 数组的变化(HashTable 和 Zend Array)
  3. 函数调用机制(Function Calling Convention)
  4. 通过宏定义和内联函数(inline),让编译器提前完成部分工作

以上的涉及的都是底层,没有研究过就不说了。说一下关于原生 php 之外的性能

运行层方面

php 大多使用的为 PHP-FPM来运行,每次运行都会开启一个连接子进程,相互独立而不干扰,但是也导致了每次都需要连接数据库、redis 等等外部工具

所以,可以在适当环境或者抽离 api,进行改造,将并发量大的 或者 核心模块的项目进行抽离,使用微服务模式运行,并使用常驻模式,如 swoole 、workman 相关

同事,进行适当压测,测算可运行承载量,进行合理分配内存和服务器

缓存方面

擅用 各种缓存,不限于 文件缓存,Redis 等 或者接入 RQ 之类的异步处理框架。由于 PHP 运行的项目原因,大多采用混合开发,在各种文件方面,让 PHP 不要承载除 API 其他的工作,如

秉承单一工作职责,有效隔离

代码层方面

禁止使用面条示写法,多使用 类进行编写。

而每个类都进行有效隔离,抽离公共方法,私有方法。合理分配目录进行管理。

Comments are closed.