php match 1 0,PHP8.0源码编译安装、JIT测试和让你爱不释手的Match表达式

92edc21e5759

6.png

概要: PHP8.0 Alpha2 源码编译安装 、 JIT配置与性能分析、新特性Match表达式

PHP8.0 Alpha2 源码编译安装

编译安装过程

1.下载源码

wget https://downloads.php.net/~carusogabriel/php-8.0.0alpha2.tar.gz

2. 解压缩

tar -zxvf php-src-php-8.0.0alpha2.tar.gz

3. 进入解压后的文件夹

cd php-src-php-8.0.0alpha2

4. 编译

./configure --prefix=/usr/local/php8 \

--with-config-file-path=/usr/local/php8 \

--enable-mbstring \

--enable-ftp \

--enable-gd \

--enable-gd-jis-conv \

--enable-mysqlnd \

--enable-pdo \

--enable-sockets \

--enable-fpm \

--enable-xml \

--enable-soap \

--enable-pcntl \

--enable-cli \

--with-mysqli=mysqlnd \

--with-pdo-mysql=mysqlnd \

--with-pear \

--with-zlib \

--with-iconv \

--enable-opcache

5. 解决出现依赖异常

libxml-2.0异常:

configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met: No package 'libxml-2.0' found

解决:安装 libxml2-devel.x86_64

yum install libxml2-devel.x86_64

sqlite3异常

configure: error: Package requirements (sqlite3 > 3.7.4) were not met: No package 'sqlite3' found

解决:安装sqlite3

yum install sqlite-devel.x86_64

libpng异常

configure: error: Package requirements (libpng) were not met: No package 'libpng' found

解决:安装libpng-devel

yum install libpng-devel

oniguruma 异常

configure: error: Package requirements (oniguruma) were not met: No package 'oniguruma' found

解决:安装oniguruma-devel

yum install oniguruma-devel

6. 安装

make && make install

7. 查看版本

[root@p41450v php-8.0.0alpha2]# /usr/local/php8/bin/php -v

PHP 8.0.0alpha2 (cli) (built: Jul 14 2020 14:54:05) ( NTS )

Copyright (c) The PHP Group

Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies

8. 配置环境

ln -s /usr/local/php8/bin/php /usr/bin/php8

cp php.ini-production /usr/local/php8/php.ini

ln -s /usr/local/php8/sbin/php-fpm /usr/bin/php8-fpm

9. 配置JIT

编辑php.ini

vi /usr/local/php8/php.ini

打开opcache扩展

zend_extensions=opcache //去掉前面的分号

opcache.enable=1 //去掉前面的分号,0改成1

opcache.enable_cli=1 //去掉前面的分号

如果 zend_extensions=opcache 加载扩展失败,可使用 zend_extension = "/usr/local/php8/lib/php/extensions/no-debug-non-zts-20190128/opcache.so" 方式加载扩展

添加JIT配置【这里为了后面的测试暂时保留 ; 】

[JIT]

;opcache.jit=1205

;opcache.jit_buffer_size=64M

保存退出

Zend/bench.php测试

分别执行 php8 -d opcache.jit_buffer_size=0 Zend/bench.php 和 php8 -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php 对比结果

92edc21e5759

4.png

结论: 启用JIT后 响应从 0.372 提升到 0.158 。性能翻倍,与官方公开的数据一致。

100万次for循环累加测试

创建测试文件t.php

vi t.php

写入:100万次for循环累加代码

$start = microtime(true);

$total = 0;

for ($i=0; $i < 1000000; $i++) {

$total += $i;

}

echo "Total: " . $total . "\n";

$spend = floor((microtime(true) - $start) * 1000);

echo "Time use: " . $spend . " ms\n";

分别执行对比结果:

92edc21e5759

5.png

从结果中可以看出: 开启JIT后,执行时长从 10ms 提升到 3ms, 性能为原来的3倍多。

新特性之Match表达式

match 从字面上就可以感觉出是和匹配相关的。没错,就是功能类似switch,但是语法和书写更方便的表达式。

match常规示例

我们先来看一个switch的例子:

switch ($status) {

case '1':

return 'a';

break;

case '2':

return 'b';

break;

default:

return 'c'

break;

}

如果使用match,则更简洁:

$result = match($status) {

1 => 'a',

2 => 'b',

default => 'c',

};

match多条件匹配

$result = match($status) {

1,3 => 'a',

2,4 => 'b',

default => 'c',

};

match多条件,执行代码块

$result = match($status) {

1,3 => {

func1();

func2();

},

2,4 => func3(),

default => 'c',

};

PS: Match表达式,将可能在8.0其他版本中体现,目前8.0Alpha2中暂时未能使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值